Skip to content

Java Virtual Machine

자바 가상 머신(영어: Java Virtual Machine, JVM)은 자바 바이트코드를 실행할 수 있는 주체이다. 일반적으로 인터프리터나 JIT 컴파일 방식으로 다른 컴퓨터 위에서 바이트코드를 실행할 수 있도록 구현되나 자바 프로세서처럼 하드웨어와 소프트웨어를 혼합해 구현하는 경우도 있다. (이론적으로는 100% 하드웨어 구현도 가능하나 비효율적이다) 자바 바이트코드는 플랫폼에 독립적이며 모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 바이트코드를 실행한다. 따라서 표준 자바 API까지 동일한 동작을 하도록 구현한 상태에서는 이론적으로 모든 자바 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.

Categories

  • org.apache.catalina.core.JreMemoryLeakPreventionListener - JRE 메모리 누수 확인
  • Scavenger - 런타임 데드코드 분석 도구 오픈소스
  • Java class file
  • CheerpJ - HTML5/WASM 으로 구현한 브라우저용 JVM 대체제
  • Jacobin JVM - Go로 의존성 없이 작성된 Java 17 JVM 구현체
  • Mill - Java와 Scala를 위한 빠른 JVM 빌드 도구
  • HotSpot

Options

JVM 옵션 목록과 기능

옵션

기능

-Xms<size>

초기 힙 크기를 설정합니다. 예: -Xms512m은 초기 힙 크기를 512MB로 설정합니다.

-Xmx<size>

최대 힙 크기를 설정합니다. 예: -Xmx1024m은 최대 힙 크기를 1024MB로 설정합니다.

-XX:PermSize=<size>

PermGen(영구 세대) 메모리의 초기 크기를 설정합니다. Java 8부터 Metaspace로 대체되었습니다.

-XX:MaxPermSize=<size>

PermGen(영구 세대) 메모리의 최대 크기를 설정합니다. Java 8부터 Metaspace로 대체되었습니다.

-XX:MetaspaceSize=<size>

Metaspace의 초기 크기를 설정합니다(Java 8 이상).

-XX:MaxMetaspaceSize=<size>

Metaspace의 최대 크기를 설정합니다(Java 8 이상).

-Xss<size>

각 스레드의 스택 크기를 설정합니다. 예: -Xss1m은 스택 크기를 1MB로 설정합니다.

-XX:+UseG1GC

G1(Garbage-First) 가비지 컬렉터를 활성화합니다.

-XX:+UseParallelGC

병렬 가비지 컬렉터를 활성화합니다.

-XX:+UseConcMarkSweepGC

CMS(Concurrent Mark-Sweep) 가비지 컬렉터를 활성화합니다.

-verbose:gc

가비지 컬렉션 로그를 출력합니다.

-XX:+PrintGCDetails

상세한 가비지 컬렉션 로그를 출력합니다.

-XX:+HeapDumpOnOutOfMemoryError

OutOfMemoryError가 발생했을 때 힙 덤프를 생성합니다.

-XX:HeapDumpPath=<file_path>

힙 덤프를 저장할 경로를 지정합니다.

-D<name>=<value>

시스템 속성을 설정합니다. 예: -Dfile.encoding=UTF-8은 파일 인코딩을 UTF-8로 설정합니다.

JVM 최적화

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+DisableExplicitGC"
  • JVM의 기본 heap 메모리 사이즈는 64MB 이므로 최소한 -server, -Xms, -Xmx 옵션은 설정해야 한다.
  • JVM 옵션 목록: http://blogs.sun.com/watt/resource/jvm-options-list.html
  • Blog2Book, 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기 추천함.

Monitoring

See also

Favorite site

Flags

Tip

Guide

References


  1. Back_to_the_Essence_-_Java_Compile_and_Run_01.pdf 

  2. Back_to_the_Essence_-_Java_Compile_and_Run_02.pdf