JVM 구조

피누·2020년 3월 13일
15

JVM

JVM은 자바 가상머신으로 자바 바이트코드를 실행 할 수 있는 주체로 JVM 덕분에 CPU나 운영체제(플랫폼)과 독릭접으로 동작 가능하다
JVM은 크게 Class Loader,GC, Runtime Data Area, Excute engine 세가지로 나뉜다

Class Loader

자바 컴파일러가 .java 파일을 컴파일하면 .class 파일(바이트 코드)가 생성된다. 이렇게 생성된 클래스 파일들을 엮어 Runtime Data Area 형태로 메모리에 적재하는 역할을 한다.

Execution Engine

메모리에 적재된 클래스들을 기계어로 변경해 명령어 단위로 실행하는 역할을 한다.

명렁어를 하나 하나 실행하는 인터프리터 방식과 실행 시점에 자주 쓸만한 코드들을 기계어로 변환 시켜놓고 저장해서 사용하는 JIT 방식이 있다.

Garbage Collector

Heap 메모리 영영에 생성 된 객체들중에 Reachability를 잃은 객체를 탐색 후 제거하는 역할을 한다.

자세한 내용은 가비지 컬렉터(GC)에 대하여를 참고

Runtime Data Area

Method Area

클래스 멤버 변수, 메소드 정보, Type(Class or interface)정보, Constant Pool, static, final 변수 등이 생성된다. 상수 풀은 모든 Symbolic Refernce를 포함하고 있다.

Heap Area

동적으로 생성된 오브젝트와 배열이 저장되는 곳으로 Garbage Collection의 대상이 되는 영역이다.

Stack Area

지역 변수, 파라미터 등이 생성되는 영역, 동적으로 객체를 생성하면 실제 객체는 Heap에 할당되고 해당 레퍼런스만 Stack에 저장된다. Stack은 스레드별로 독자적으로 가진다.

Heap에 있는 오브젝트가 Stack에서 참조 할 수 없는 경우 GC의 대상이 된다.

PC Register

현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있다.(CPU의 PC Register와 다르다)

자세한 내용은 링크 참조

Native Method Stack

자바외 언어로 작성된 네이티브 코드를 위한 메모리 영역


Reference
JIT : https://medium.com/@lazysoul/jit-just-in-time-16bb63f3ae26
JVM : https://jeong-pro.tistory.com/148

profile
어려운 문제를 함께 풀어가는 것을 좋아합니다.

2개의 댓글

comment-user-thumbnail
2020년 3월 24일

JVM, GC의 정확한 동작 방식이 궁금했는데 정리 너무 깔끔하네요 ㅎㅎ 잘 읽었습니다!
+) 그리고 PC Register 부분 설명 링크가 잘못 걸려있는거 같아요 ㅎㅎ

답글 달기
comment-user-thumbnail
2020년 4월 2일

Excute engine -> Execute engine 오타있어요 :)

답글 달기