본문 바로가기
INFRA/MW

[JAVA]JVM 메모리에

by 근현대사 2023. 6. 22.
반응형

JVM(Java Virtual Machine) 메모리

 

Java 애플리케이션 실행에 필요한 데이터를 저장하는 영역입니다. JVM 메모리는 크게 다섯 개의 구성 요소로 나뉩니다: 힙(Heap), 스택(Stack), 메소드 영역(Method Area), PC 레지스터(PC Registers), 그리고 네이티브 메소드 스택(Native Method Stacks).

     

    1. 힙 (Heap): 힙은 객체와 데이터를 저장하는 공간입니다. 새로운 객체가 생성되면 공간에 할당되고, 사용되지 않는 객체는 가비지 컬렉터(Garbage Collector) 의해 자동으로 제거됩니다. 힙은 다시 부분으로 나뉩니다.

  • Young Generation: 이 영역은 또 다시 세 개의 부분으로 나뉩니다: Eden Space, Survivor 0 (S0), Survivor 1 (S1). 새로 생성된 대부분의 객체는 Eden Space에 위치합니다. Eden Space가 가득 차게 되면, 가비지 컬렉션(Garbage Collection, GC)이 발생하며, 아직 참조되고 있는 "살아있는" 객체들은 Survivor 영역 중 하나로 이동합니다. Survivor 영역들은 서로 교대로 사용되며, 한 영역이 가득 차면 그 내용은 다른 Survivor 영역으로 복사되고 가비지 컬렉션됩니다.
  • Old Generation (또는 Tenured Generation): 이 영역은 Young Generation의 객체 중에서 가비지 컬렉션을 여러 번 거친 후에도 살아남은 객체들이 저장되는 공간입니다. 이런 객체들은 일반적으로 애플리케이션의 생명 주기 동안 계속 존재하는, 상대적으로 오래된 객체들입니다.
  • Permanent Generation (Java 7 이전) 또는 Metaspace (Java 8 이후): 영역은 애플리케이션에서 사용하는 클래스와 메소드의 메타데이터를 저장하는 곳입니다. 영역의 내용은 클래스 로딩 언로딩 시에 생성되고 제거됩니다.

Heap 관리는 JVM 가비지 컬렉터에 의해 수행됩니다. 가비지 컬렉터는 이상 필요하지 않은 객체를 자동으로 제거하며, 과정을 통해 메모리를 효과적으로 관리하고 애플리케이션의 성능을 최적화합니다.

 

 

    2. 스택 (Stack): 스택은 스레드별로 생성되며, 메소드 호출과 지역 변수를 저장합니다. 스레드는 자신만의 JVM 스택을 가지며, 이는 스레드가 생성될 생성되고, 스레드가 종료되면 소멸됩니다.

    3. 메소드 영역 (Method Area): 메소드 영역에는 클래스 구조에 대한 런타임 상수 , 필드 메소드 데이터, 그리고 메소드와 생성자의 바이트 코드가 저장됩니다

    4. PC 레지스터 (PC Registers): PC 레지스터는 현재 실행 중인 JVM 명령의 주소를 저장합니다. 이는 스레드별로 할당되며, 스레드가 고유한 PC 레지스터를 갖게 됩니다

    5. 네이티브 메소드 스택 (Native Method Stacks): 네이티브 메소드 스택은 JVM 사용하는 네이티브 메소드를 위한 스택입니다. 네이티브 메소드는 Java 외의 언어(: C, C++) 작성된 메소드를 말합니다.

 

 

정리 

JVM 메모리는 , 스택, 메소드 영역, PC 레지스터, 그리고 네이티브 메소드 스택으로 구성되어 있습니다. 힙은 객체와 데이터를 저장하며, 스택은 메소드 호출과 지역 변수를 저장합니다. 메소드 영역은 클래스와 메소드에 대한 메타데이터를 저장하며, PC 레지스터는 현재 실행 중인 JVM 명령의 주소를 저장합니다. 마지막으로, 네이티브 메소드 스택은 네이티브 메소드를 위한 스택입니다. 이러한 구성 요소는 Java 어플리케이션  실행과 성능에 중요한 역할을 합니다.

반응형

'INFRA > MW' 카테고리의 다른 글

[개발]중앙집중형 형상관리(CVCS)  (0) 2023.07.13
[오픈소스]젠킨스에 대해  (0) 2023.07.12
[JAVA] Servlet 서블릿에 대해  (0) 2023.07.06
WEB/WAS 란  (0) 2023.06.17
heap dump & thread dump  (0) 2023.06.15