GC에 대한 글이나 내부 순도 조정에 대한 글을 찾고 계시다면 제 다른 글을 읽어보시기 바랍니다. JVM 튜닝에 대한 요약이므로 헛소리는 하지 않겠습니다. 다양한 측면에서 다음과 같은 방법을 모아보았습니다.
1. JVM 버전을 업그레이드합니다. 64비트를 사용할 수 있는 경우 64비트 JVM을 사용하십시오.
기본적으로 설명할 것이 없고, JVM을 최신 버전으로 업그레이드하는 방법은 매우 간단합니다. 아직도 JDK1.4나 이전 JVM을 사용하고 있다면 가장 먼저 해야 할 일은 업그레이드입니다. 1.4->1.5->1.6의 JVM은 단순한 버전 번호 업그레이드나 새로운 언어 기능을 추가하는 것이 아니기 때문에 그렇게 간단합니다. 대신 JVM이 크게 개선되었습니다. 모든 버전 업그레이드는 엄청난 성능 업그레이드를 가져옵니다. 특히 SUN이 친구에게는 Java가 전부라는 것을 깨달았을 때(약간 과장되었지만 재고 번호도 JAVA로 변경되었습니다. 하하). SUN의 JVM 포럼을 자주 방문하시면 실제로 JVM에 너무 많은 문제가 있다는 것을 아실 수 있습니다. 여러 가지 이유로 1.6으로 업그레이드할 수 없는 경우 해당 버전의 최신 버전으로 업그레이드할 수 있습니다.
2. 올바른 GC(Garage Collection)를 선택하세요.
JAVA 프로그램이 GC일 경우 현재 프로그램이 중지되기 때문입니다. 특히 Full GC 중에는 오랜 시간 동안 유지됩니다. 일반적으로 GUI 프로그램의 경우 이를 받아들이기가 어렵습니다(Eclipse가 일시 중지되는 경우를 생각해 보세요). JAVA5 이후에는 여러 유형의 GC가 제공되므로 자신에게 맞는 유형을 선택할 수 있습니다. 직렬 수집기, 병렬 수집기, 동시 수집기, 열차 수집기(구식)의 네 가지 유형이 있습니다. 병렬 수집은 후자에서 여러 번 사용되므로 이론적으로 더 효율적입니다(2CUP 이상이 필요하지만 이제 멀티 코어가 더 대중화되고 있습니다, 하하). 팁: GC 유형을 변경한 후 JVM 메모리 양을 적절하게 늘리십시오.
3. 메모리 크기를 올바르게 설정하세요. JVM 힙의 각 영역(young, old, perm)에 맞게 크기를 설정합니다.
이 조정은 GC의 효율성에 직접적인 영향을 미치기 때문에 가장 어려운 조정입니다. 그리고 프로그램마다 종류가 다르기 때문에 보편적인 데이터는 없습니다. 몇 가지 일반적인 규칙 외에도 도구(jstat, jvmstat, jconsole 등)를 사용하여 주의 깊게 조정해야 합니다. 일반적으로 사용되는 몇 가지 지침이 아래에 언급되어 있습니다. 일반적으로 몇 가지 매개변수를 사용하여 -Xms -Xmx-XX:MaxPermSize를 조정합니다.
3.1 -XX:NewRatio(NewSize/MaxNewSize) 값을 늘리면 Young GCS 수는 줄어들지만 Old GCS 시간은 늘어납니다.
3.2 Normal GC를 늘리는 방법(Full GC를 줄이는 방법). 젊은 영역의 크기를 최대 40%까지 늘리고 생존자 영역의 크기를 크게 늘립니다. 젊은 세대에 더 많은 개체를 유지하십시오.
4. 클래스 사용량을 줄이고 클래스 로드 및 언로드에 주의하며 JSP 페이지 수를 줄입니다.
클래스는 실제로 객체이며 Perm 영역에 직접 할당됩니다. 심지어 Full GC에서도 클래스를 수집하는 경우는 거의 없습니다. JSP도 동일한 효과로 perm 영역에 할당됩니다. perm이 너무 크고 XX:MaxPermSize 값을 초과하는 경우 OutOfMemoryError: PermGen 공간 예외가 발생합니다. 해결책은 -XX:MaxPermSize 값을 늘리는 것입니다.
5. -Xnoclassgc 사용을 피하세요
6. RMI 프로그램인 경우 RMI DGC 시간 조정에 주의하세요.
다음은 프로그램 작성 시 주의해야 할 몇 가지 사항입니다. JVM 성능을 향상시키기 위해 GC를 줄일 수도 있습니다.
1. System.gc() 메서드를 사용하지 마세요.
Full GC가 발생하기 때문입니다.
2. (라이프 사이클이 짧은) 큰 임시 개체는 가능한 한 적게 할당합니다.
Full GC 중에만 수집되는 이전 영역에 직접 할당할 수도 있습니다.
3. finalize() 메서드를 사용하지 마세요.
finalize()는 GC 부담을 증가시키므로 대신 java.lang.ref를 사용하세요.
JVM 튜닝 기술 요약 및 분석과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!