JVM과 Garbage Collection의 간단한 예제

JVM과 Garbage Collection의 간단한 예제

2018, Nov 18    

JVM이란?

JVM(Java Virtual Machine)을 어떻게 정의할 것인가 고민에 앞서 기본적인 JVM 원어를 알아보자.
JVM은 물리적인(Physical) 형태가 아닌 소프트웨어(Software)로서 하나의 언어라고 정의하기도 한다.
그래서 이것이 “VIRTUAL”을 뜻하는 것이다. 그리고 JVM은 독자적으로 작동할 수 있는 메커니즘과 구조를 가지고 있다.


jvm의구조


JVM 수행과정

  1. Java Source: 사용자가 작성한 Java코드(.java 확장자)
  2. Java Compiler: Java Source 파일을 JVM 이 해석할 수 있는 Java Byte Code 형태로 변경.
  3. CLass Loader: .class파일들을 Load하여 Loading된 클래스들을 Runtime Data Area에 배치시킴.
  4. Execution Engine: Loading된 클래스의 Bytecode를 해석(Interpret)한다.
  5. Runtime Data Area: JVM이라는 프로세스가 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간.


Runtime Data Area

  • 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이 형성되는 구역이다.