본문 바로가기

Language/Java

JVM 정리

1. JVM

- .java 파일을 컴파일한 결과물(.class)을 실행시키는 프로그램.

 

2. JVM 구조

- Heap

- Method Area

- Stack

- Native Method Stack

- PC Register

 

위에 나열한것 모두 각각 개별적인 영역이라고 이해하면 될 것 같고, Heap, Method Area는 JVM에 한개 존재하고, 

나머지 (Stack, Native Method Stack, PC Register)는 Thread당 하나씩 존재한다.

Heap 과 Method Area는 Thread간 공유가 가능하기 때문에, Thread Safe를 신경써서 코드를 작성해야 한다.

 

3. JVM 내부 구성요소들의 역할

 

- Heap

객체들이 new() 라는 키워드로 생성이되면 Heap영역에 존재한다고 보면 된다. 또한 배열도 역시 Heap영역에 존재하게 된다.

primitive type이나 reference등은 이곳에 존재하지 않는다. 단지 object들만 존재하게 된다. 이곳의 객체들은 생성과 소멸을 하게 되는데 소멸은 GC에 의해서만 가능하다. (Object 클래스 내에 finalize()라는 메소드가 있긴 한데, Java9부터 deprecated가 되었다.)

 

- Method Area

클래스(Static), 인터페이스 변수 및 정보, 메소드 정보, 타입 정보, Constant Pool...

heap과 달리 primitive type or object의 reference만 존재한다.

 

- Stack

지역변수 (메소드내 변수), 메소드 파라미터, 객체의 reference가 존재한다.

메소드가 실행될때 실행되는 정보들이 이곳에 쌓이고, 메소드 호출이 종료되면 제거된다. 

 

- PC Registers

현재 Thread가 실행되는 부분의 주소와 명령들을 저장하는 공간

 

- Native Method Stack

Java가 아닌 다른언어로 작성된 코드를 위한 영역 

 

 

 

 

 

'Language > Java' 카테고리의 다른 글

Stomp Heartbeat (for Spring)  (0) 2021.04.25
에러처리  (0) 2021.03.23
Stack 대신에 Deque를 사용하자  (0) 2021.03.09
Abstract VS Interface  (0) 2020.05.22