CS/자바

JVM 메모리 구조

nagrang 2025. 12. 27. 15:08

 

JVM이란?

JVM은 물리적인 형태가 아닌 소프트웨어의 형태로 존재한다 해서 "VRITURAL"을 뜻한다. 그리고 독자적으로 작동할 수 있는 매커니즘과 구조를 가진다는 점에서 "MACHINE"이라는 단어가 조합된다.

 

그러나 JVM은 하나의 완벽한 무엇이다라고 정의하기 보다는, 하나의 개념, 스펙(Specitification)이다. 표준화된 정의만 제공되어 각 JVM 벤더(Oracle, IBM)들이 별도로 구현해서 사용한다.

 

JVM의 역할은 개발자들이 작성한 Java 프로그램이나 Web 애플리케이션 Server(WAS) 등을 구별하지 않고 모든 Java 프로그램을 실행시키는 것이다. 여기서 실행이란 컴파일 과정을 통해 생성된 class 파일을 JVM으로 로딩하고 해석하는 과정을 거쳐 메모리 등의 리소스를 할당하고 관리하며 정보를 처리하는 일련의 작업들이다.

 

 

Java 프로그램 수행 과정

JVM 상에서 Class Loader를 통해 Class 파일들을 로딩시키고, 로딩된 Class 파일들은 Excute Engine을 통해 해석된다. 해석된 프로그램은 Runtime Data Area에 배치되어 실질적인 수행이 이루어지게 된다.

(출처 : https://inpa.tistory.com/entry/JAVA-%E2%98%95-JVM-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-%EC%8B%AC%ED%99%94%ED%8E%B8)

 

 

  1. Java Compiler가 Java source file을 .class 파일로 변환한다. JVM이 해석할 수 있는 Java Byte Code(.class) 파일이 만들어진다.
  2. Class Loader class 파일을 load하여 loading된 클래스들을 Runtime Data Area에 배치 한다.
  3. Execution Engine:  Runtime Data Area에 loading된 클래스의 bytecode를 해석(Interpret)한다. 이 과정에서 Garbage Collector의 작동과 Thread 동기화가 이루어진다.
  4. Runtime Data Area : JVM이라는 프로세스가 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간이다. 해석된 프로그램이 배치되어 실질적인 수행이 이루어진다.

 

 

Runtime Data Area

Runtime Data Area의 내부에 대해서 좀 더 자세히 알아보자.

 

  • Method Area : 클래스, 변수, 메소드, static 변수, 상수 등의 정보 등이 저장되며 모든 Thread가 공유한다. (os 프로세스의 저장영역인 코드, 데이터 영역과 비슷)
  • Heap Area : 동적할당으로 생성된 인스턴스와 객체가 저장되는 공간. GC가 관리하는 공간이며 모든 Thread가 공유해서 Race Condition을 유발할 수 있다.
  • Stack Area : 매개변수, 지역변수, 리턴 값등이 저당되는 공간으로 메소드가 호출될 때 스택 구조로 FILO로 생성된다. 각 Thread 별로 하나씩 생성 된다.
  • PC Register : CPU Register와 역할이 유사하다. 현재 수행 중인 JVM 명령의 주솟값이 저장된다. 각 Thread 별로 하나씩 생성된다.
  • Natice Method Stack : 다른 언어(C/C++)의 메소드 호출을 위해 할당되는 구역으로 언어에 맞게 Stack이 형성되는 구역이다.  각 Thread 별로 하나씩 생성된다.

이러한 실행 과정 속에서 JVM은 필요에 따라 Thread 동기화와 Gabage Collection과 같은 작업을 수행하게 된다. 

'CS > 자바' 카테고리의 다른 글

[Java] String의 split() 메소드 뜯어보기  (0) 2025.01.19
[Java] 제네릭 - Generic  (1) 2024.12.03
자바 #6 - static과 final  (1) 2024.02.13
자바 #5 - 생성자와 접근 지정자  (1) 2024.02.09
자바 #4 - 객체지향 언어의 특징  (0) 2024.02.07