JAVA

JVM

잔망루피 2023. 4. 23. 23:44
반응형

JVM(Java Virtual Machine)

  • 시스템 메모리를 관리하면서 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경 제공
  • JVM은 자바 클래스 로더(Class Loader)와 자바 실행 엔진(Execution Engine)에 의존
    • JVM 자바 클래스 로더
      • 클래스를 메모리에 로드하고 실행을 위해 사용할 수 있게 만드는 JVM의 일부
      • 클래스 로딩(Class Loading)을 최대한 효율적으로 수행하기 위해 지연 로딩(Lazy-loading)과 캐싱(Caching) 같은 기법을 활용
    • JVM 실행 엔진
      • 클래스 로더가 클래스를 로딩하는 작업을 마치면, JVM은 각 클래스에 있는 코드를 실행하기 시작
      • JVM 실행에 실행 엔진은 필수적이다.
      • 파일 시스템 액세스, 네트워크 입출력을 위한 리소스를 관리
  • ⚙️ 기능
    • Java 프로그램이 어디에서든 실행될 수 있도록 한다.
    • 프로그램 메모리를 관리하고 최적화하는 것
  • Garbage Collector
    • Java 프로그램에서 사용되지 않는 메모리를 지속적으로 찾아내서 제거
    • 실행 중인 JVM 내부에서 일어난다.
    • 종류
      1. Serial GC
        • GC를 처리하는 스레드가 1개
        • CPU 코어가 1개만 있을 때 사용하는 방식
        • Mark-Compact collection 알고리즘 사용
      2. Parallel GC
        • GC를 처리하는 스레드가 여러 개
        • Serial GC보다 빠르게 객체를 처리
        • Parallel GC는 메모리가 충분하고 코어의 개수가 많을 때 사용하면 좋음
      3. Concurrent Mark Sweep GC(CMS GC)
        • stop-the-world 시간이 짧다.
          • stop-the-world는 GC를 실행하기 위해 JVM이 어플리케이션 실행을 멈추는 것
        • 애플리케이션의 응답 시간이 빨라야 할 때 CMS GC를 사용한다.
        • 다른 GC 방식보다 메모리와 CPU를 더 많이 사용
        • Compaction 단계가 제공되지 않는다.
      4. G1 GC
        • 각 영역을 Region 영역으로 나눈다.
        • GC가 일어날 때, 전체 영역(Eden, Survival, Old generation)을 탐색하지 않는다.
        • stop-the-world 시간이 짧다.
    • Stack
      • 정적으로 할당한 메모리 영역
      • 원시 타입의 데이터가 값과 함께 할당, Heap 영역에 생성된 Object 타입의 데이터의 참조 값 할당
    • Heap
      • 동적으로 할당한 메모리 영역
      • 모든 Object 타입의 데이터가 할당
      • Heap 영역의 Object를 가리키는 참조 변수가 Stack에 할당
    • 과정
      1. [Mark] Garbage collector가 Stack의 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾아서 마킹
      2. [Mark] Reachable Object가 참조하고 있는 객체도 찾아서 마킹
      3. [Sweep] 마킹되지 않은 객체를 Heap에서 제거

 

 


참고 👇

https://www.itworld.co.kr/news/110837

 

"JVM이란 무엇인가" 자바 가상 머신 이해하기

자바 가상 머신(Java Virtual Machine, JVM)은 시스템 메모리를 관리하면서 자바 기반 애플리케이션을 위해 이식 가능한 실행 환

www.itworld.co.kr

 

https://www.youtube.com/watch?v=vZRmCbl871I 

 

반응형

'JAVA' 카테고리의 다른 글

enums(열거형)  (0) 2023.05.22
Thread(쓰레드)  (1) 2023.04.24
Abstract class(추상 클래스)  (0) 2023.03.23
javax  (0) 2023.03.03
generic  (0) 2023.01.25