JVM의 구조

현업에서 자바를 하지는 않고 있지만, 언젠가는  jvm이나 gc에 대한 지식이 필요할듯 하여 공부중 입니다.

java에서 프로그램을 실행하면, 컴파일 과정에서 생긴 class 파일을 JVM으로 로딩하고 ByteCode를 해석을 하여 메모리 등의 리소스를 할당하는 등의 과정을 진행하게 됩니다. 이때 JVM은 Thread 관리, Garbage Collection과 같은 메모리 정리 과정도 진행 합니다.


JVM

자바의 프로그램 실행은 아래의 과정을 거치게 됩니다.

Java 프로그램 수행 과정























  • java source : 사용자의 코드
  • Execution Engine : 로딩된 클래스의 ByteCode를 해석 합니다.
  • Runtime Data Area : JVM이 프로그램을 수행하기 위해 OS에서 할당받은 공간.


그중 Runtime Data Areas를 세부적으로 표현하면 다음과 같습니다.


JVM Architecture





















  • Method : 클래스, 변수, 메서드, static, 상수 등이 들어감.(모든 쓰레드가 공유)
  • Heap : new 명령어로 생성됨.(GC의 영역, 모든 쓰레드가 공유)
  • Stack : 메서드 내에서 생성되는 값. LIFO로 진행.
  • Native Method : 다른 언어등의 메서드를 호출하기 위한 공간.


이런 과정 중 Thread Synchronization과 Garbage Collection 등이 진행 됩니다.

Java Heap

위의 구조 중 Heap 영역에서 instance와 array 객체를 저장하는 구조 이며, 그를 해제하는 과정은 JVM이 아닌 Garbage Collector를 통해서 진행이 됩니다.













위는 주로 사용되는 Hotspot JVM의 Heap 구조 입니다.

Young Generation은 eden과 survivor 영역으로 구성이 되며, eden은 Object가 최초로 생할당 되는 장소 입니다. 해당 영역이 꽉 차게 된다면 객체의 참조 여부를 보게 되고, 참조가 남아있다면, Survivor로 옮기고 끊어져 있다면 그대로 둔 후 모든 과정이 끈나면 Eden 영역을 모두 삭제 합니다. 해당 영역의 GC는 Minor GC 라고 합니다.

Young Generation에서 오래 살아남으면 Old Generation으로 이동하게 되는데, 이때의 기준은 특정 회수 이상 참조되어 Age를 초과한 Object 입니다. 이러한 과정중 Old Generation의 영역도 부족하게 되면 해당 영역에서도 GC가 시작이 되며 이를 Full GC라고 합니다.

댓글

이 블로그의 인기 게시물

포켓몬 고 17셀 확인 포고맵 사용 방법

고려대학교 야간대학원 중간 후기

HTTP 오류 500.19 - Internal Server Error 에러 처리법