티스토리 뷰

Java

[Java] JVM

snail voyager 2024. 2. 17. 00:12
728x90
반응형

JVM

JVM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신(VM)입니다. 

JVM은 자바 프로그램을 컴파일된 바이트 코드 형태로 실행하고, 이를 하드웨어와 운영 체제에 맞게 해석하여 실행합니다. 이를 통해 자바 프로그램은 특정 플랫폼에 종속되지 않고 다양한 환경에서 실행될 수 있습니다.

  • 바이트 코드 실행: JVM은 자바 컴파일러에 의해 생성된 바이트 코드를 실행합니다. 이 바이트 코드는 자바 소스 코드를 컴파일한 결과물로, 플랫폼 중립적이며 특정 운영 체제나 하드웨어에 종속되지 않습니다.
  • 메모리 관리: JVM은 자바 프로그램이 사용하는 메모리를 관리합니다. 이는 객체의 생성 및 소멸, 가비지 컬렉션 등을 포함합니다. JVM은 힙(heap) 영역과 스택(stack) 영역을 사용하여 메모리를 관리합니다.
  • 가비지 컬렉션: JVM은 더 이상 사용되지 않는 객체를 자동으로 감지하고 제거하는 가비지 컬렉션 기능을 제공합니다. 이를 통해 메모리 누수(memory leak)를 방지하고 메모리를 효율적으로 관리할 수 있습니다.
  • 실행 환경 제공: JVM은 자바 프로그램이 실행될 수 있는 실행 환경을 제공합니다. 이는 자바 런타임 환경(Runtime Environment)을 포함하며, 필요한 라이브러리 및 클래스들을 로드하고 실행하는 역할을 합니다.
  • 선언적 스택 관리: JVM은 메소드 호출 및 반환을 스택을 사용하여 관리합니다. 이를 통해 메소드 호출의 순서를 추적하고 메소드 호출 시에 필요한 정보들을 스택 프레임에 저장하여 관리합니다.

Java HotSpot

Java JVM의 구현체 중 하나

성능 향상과 최적화를 중점으로 개발되었으며,

자바 응용 프로그램의 실행 속도와 메모리 관리를 최적화하기 위해 다양한 기술을 사용한다.

  • 실행 속도 최적화: Java HotSpot은 JIT(Just-In-Time) 컴파일러를 사용하여 자바 바이트 코드를 네이티브 코드로 변환합니다. 이로써 프로그램이 처음 실행될 때는 인터프리터에 의해 실행되지만, 프로그램이 반복적으로 실행될 때는 JIT 컴파일러에 의해 네이티브 코드로 컴파일되어 실행 속도를 향상시킵니다.
  • 가비지 컬렉션 최적화: Java HotSpot은 다양한 가비지 컬렉션 알고리즘을 제공하여 메모리 관리를 최적화합니다. 이로써 힙 메모리의 사용량을 최소화하고 가비지 컬렉션의 일시 중단 시간을 최적화할 수 있습니다.
  • 프로파일링 및 모니터링: Java HotSpot은 실행 중인 애플리케이션의 동작을 모니터링하고 프로파일링하는 기능을 제공합니다. 이를 통해 애플리케이션의 성능 문제를 식별하고 최적화할 수 있습니다.
  • 최적화 기술: Java HotSpot은 다양한 최적화 기술을 사용하여 자바 응용 프로그램의 성능을 향상시킵니다. 예를 들어, 인라이닝, 루프 최적화, 가상 호출 제거 등의 기술을 사용하여 실행 속도를 최적화합니다.
  • 다양한 플랫폼 지원: Java HotSpot은 다양한 플랫폼(운영 체제 및 아키텍처)에서 실행될 수 있도록 지원됩니다. 이로써 자바 애플리케이션이 여러 환경에서 이식성을 가질 수 있습니다.

JIT 컴파일

Just-in-Time (적시, 그때끄때 하는) 컴파일

핫스팟은 프로그램 단위를 인터프리티드 바이트코드에서 네이트브 코드로 컴파일

핫스팟은 인터프리티드 모드로 실행하는 동안 애플리케이션을 모니터링하면서 가장 자주 실행되는 코드를 JIT 컴파일을 수행한다.

  1. 인터프리터 실행: 프로그램이 처음 실행될 때는 JIT 컴파일러가 사용되지 않고, JVM의 인터프리터가 바이트 코드를 한 줄씩 실행합니다. 이는 바이트 코드를 실시간으로 해석하여 실행하는 방식으로, 초기에는 성능이 낮을 수 있습니다.
  2. 프로파일링: 프로그램이 실행되는 동안 JVM은 프로파일링을 수행하여 자주 실행되는 메서드나 루프 등을 식별합니다. 이를 통해 JIT 컴파일러가 어떤 부분을 최적화할지 결정할 수 있습니다.
  3. 컴파일: 프로파일링을 통해 식별된 코드 영역은 JIT 컴파일러에 의해 컴파일됩니다. 이 때 해당 부분의 바이트 코드가 네이티브 코드로 변환되어 실행될 수 있도록 합니다.
  4. 네이티브 코드 실행: JIT 컴파일러에 의해 생성된 네이티브 코드는 JVM에 의해 실행됩니다. 이는 기존의 인터프리터보다 빠르게 실행되며, 프로그램의 성능을 향상시킵니다.

VisualVM

VisualVM은 자바 응용 프로그램의 성능 모니터링 및 디버깅을 위한 무료 툴

  • 성능 모니터링: VisualVM을 사용하여 자바 응용 프로그램의 CPU 사용량, 메모리 사용량, 쓰레드 수 등의 성능 지표를 실시간으로 모니터링할 수 있습니다.
  • 힙 덤프 및 분석: VisualVM은 자바 응용 프로그램의 힙 덤프(heap dump)를 생성하고 이를 분석하여 메모리 누수 등의 문제를 식별할 수 있습니다.
  • 쓰레드 분석: VisualVM을 사용하여 자바 응용 프로그램의 쓰레드 상태를 분석하고 데드락 등의 문제를 식별할 수 있습니다.
  • 프로파일링: VisualVM을 사용하여 자바 응용 프로그램의 성능 프로파일링을 수행할 수 있습니다. 이를 통해 어떤 메서드가 가장 많은 시간을 소비하는지 등을 확인할 수 있습니다.
  • JMX 연결: VisualVM을 사용하여 JMX(Java Management Extensions)를 통해 자바 응용 프로그램을 모니터링하고 관리할 수 있습니다.
728x90
반응형

'Java' 카테고리의 다른 글

[Java] Garbage Collector 개념  (0) 2024.02.19
[Java] 마이크로벤치마킹 JMH  (0) 2024.02.17
[Java] List.of vs Arrays.asList  (1) 2024.02.11
[Java] CPU 와 ThreadPool Size 결정 방법  (0) 2024.01.29
[Java] Enum Singleton Pattern  (0) 2023.12.27
반응형
300x250