JVM 튜닝은 주로 각 세대의 크기 제어 및 GC 전략을 포함한 메모리 관리 튜닝을 위한 것입니다. GC는 가비지 컬렉션을 시작할 때 애플리케이션 스레드를 일시 중지하므로 성능에 심각한 영향을 미치기 때문에 튜닝의 목적은 GC로 인해 발생하는 애플리케이션 스레드의 일시 중지 시간을 최소화하고 Full GC 횟수를 줄이는 것입니다.
가장 중요한 매개변수: -Xms, -Xmx, -Xmn, -XX: SurvivorRatio, -XX:MaxTenuringThreshold, -XX:PermSize, -XX:MaxPermSize
-Xms, -Xmx는 일반적으로 런타임 중에 JVM 메모리가 지속적으로 확장되는 것을 방지하기 위해 동일한 값으로 설정됩니다. 이 값은 JVM 힙이 사용할 수 있는 최대 메모리를 결정합니다.
-Xmn은 신세대 공간의 크기를 결정합니다. 신세대 Eden, S0, S1의 세 영역 비율은 -XX:SurvivorRatio로 제어할 수 있습니다. 값이 4이면 다음을 의미합니다. Eden :S0:S1 = 4:3:3 )
-XX:MaxTenuringThreshold는 개수를 제어합니다. Minor GC 이후 객체가 Old Age에 진입하는 횟수, 이 매개변수는 Serial Serial GC에서만 유효합니다.
-XX:PermSize, -XX:MaxPermSize는 메소드 영역의 크기를 제어하는 데 사용되며 일반적으로 동일한 값으로 설정됩니다.
1. 신세대 크기를 너무 작게 설정하지 마세요
신세대 설정이 너무 작으면 두 가지 명백한 현상이 발생합니다. 하나는 마이너 GC의 수가 빈번하다는 것이고, 다른 하나는 마이너 GC 개체가 Old Generation에 직접 들어갈 수 있다는 것입니다. Old Generation에 메모리가 부족하면 Full GC가 시작됩니다.
2. 새 세대를 너무 크게 설정하지 마세요
Young Generation을 너무 크게 설정하면 두 가지 문제가 발생합니다. 첫째, Old Generation이 작아지고 이로 인해 Full GC가 자주 실행될 수 있으며, 둘째, Minor GC를 재활용하는 데 걸리는 시간이 크게 늘어납니다.
3. 생존자 영역이 너무 크거나 너무 작지 않도록 하세요
-XX: SurvivorRatio 매개변수의 값이 클수록 Eden 영역이 커지고 Minor GC 수가 감소한다는 의미이지만 두 생존 영역이 생존 영역의 메모리 크기를 초과하는 개체가 마이너에 저장되는 경우 GC 후에도 재활용되지 않으면 바로 노년기로 진입하게 되는데,
-XX: SurvivorRatio 매개변수 값이 너무 작게 설정되어 Eden 영역이 작아지고 마이너 GC 트리거 수가 늘어나 Survivor 영역이 커진다는 의미입니다. 마이너에 더 많은 것을 저장할 수 있습니다 GC 이후 살아남은 객체는 Old Age로 진입하는 것을 방지합니다.
4. 신세대에서 개체의 생존 기간을 합리적으로 설정합니다.
신세대 생존 기간의 값은 신세대 개체가 Minor GC를 거친 후 Old 세대에 몇 번 진입할지를 결정합니다. 따라서 이 값은 사용자의 애플리케이션에 따라 조정되어야 합니다. Jvm 매개변수의 이 값은 -XX:MaxTenuringThreshold에 해당하며 기본값은 15배입니다.
1.GC 매칭
다른 가비지 컬렉터 보기
2. JVM 매개변수 보기
명령줄 도구 시각적 도구
3.GC 로그 매개변수
-XX :+PrintGCDetails-XX:+PrintGCTimeStamps-Xloggc:c:javagc.log