JVM

  • JVM은 자바로 작성한 소스 코드를 해석해 실행하는 별도의 프로그램입니다.
  • JVM에 Java 프로그램이 로드되어 실행될 때 특정 값 및 바이트코드, 객체, 변수 등과 같은 데이터들이 메모리에 저장되어야 합니다. 런타임 데이터 영역이 바로 이러한 정보를 담는 메모리 영역이며, 크게 5가지 영역으로 구분되어 있습니다. |Method Area |Heap Area |Stack Area| PC Register| Native Method Stack|

Stack 영역

  • 맨 마지막에 들어온 데이터가 가장 먼저 나가는 자료 구조를 스택이라고 하며, LIFO는 이러한 스택의 데이터 입출력 순서를 나타내는 원칙입니다.
  • 메서드가 호출되면 그 메서드를 위한 공간인 Method Frame이 생성됩니다.
  • 메서드 내부에서 사용하는 다양한 값들이 있는데 참조변수, 매개변수, 지역변수, 리턴값 및 연산 시 일어나는 값들이 임시로 저장됩니다.
  • Method Frame이 Stack에 호출되는 순서대로 쌓이게 되는데, Method의 동작이 완료되면 역순으로 제거됩니다.

Heap 영역

  • 객체를 다룬다는 것은 Stack 영역에 저장되어 있는 참조 변수를 통해 Heap 영역에 존재하는 객체를 다룬다는 의미입니다.
  • Heap 영역은 실제 객체의 값이 저장되는 공간입니다.

Garbage Collection

  • 가비지 컬렉션은 프로그램에서 더 이상 사용하지 않는 객체를 찾아 삭제하거나 제거하여 메모리를 확보하는 것을 의미합니다.