본문 바로가기

Programming/Java

JVM이란?

728x90

Java 프로그램 수행 과정

  • Java Source : 사용자가 작성한 Java 코드이다.(확장자 .Java)
  • Java Compiler : Java Source 파일을 JVM이 해설학 수 있는 Java Byte Code로 변경한다.
  • Java Byte Code : Java Compiler에 의해 수행될 결과물이다.(확장자 .class 파일)
  • Class Loader : JVM내로 .class 파일들을 Load하여 Loding된 클래스 들을 Runtime Data Area에 배치한다.
  • Execution Engine : Loading된 클래스의 Byte code를 해석(Interpret) 한다.
  • Runtime Data Area : JVM이라는 프로세스가 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간이다.

JVM Architecture Runtime Data Area Detail

 

  • Method Area : 클래스, 변수, Method, static변수, 상수 정보 등이 저장되는 영역(모든 Thread가 공유한다)
  • Heap Area : new 명령어로 생성된 인스턴스와 객체가 저장되는 구역(Garbage Collection 이슈는 이 영역에서 일어나며, 모든 Thread가 공유한다)
  • Stack Area : Method 내에서 사용되는 값들(매개변수, 지역변수, 리턴값 등)이 저장되는 구역으로 메소드가 호출될 때 LIFO로 하나씩 생성되고, 메소드 실행이 완료되면 LIFO로 하나씩 지워진다.(각 Thread별로 하나씩 생성된다)
  • PC Register : CPU의 Register와 역할이 비슷하다. 현재 수행 중인 JVM 명령의 주소값이 저장된다.(각 Thread별로 하나씩 생성된다)
  • Native Method Stack : 다른 언어(C/C++등)의 메소드 호출을 위해 할당되는 구역으로 언어에 맞게 Stack이 형성되는 구역이다.
728x90