조심하십시오 .... 신중하지 않으면 GC가 털이 많은 수 있습니다. 모든 런타임 (Java 용 JVM/.Net 용 CLR)에는 몇 가지 프로세스가 있습니다. 일반적으로 메모리의 초기 단계 최적화가 있습니다 (Young Generational Garbage Collection/Young Gen GC & Old Generational Garbage Collection/Old Gen GC). 젊은 세대는 정기적으로 발생하며 일반적으로 작은 일시 중지/딸꾹질에 기인합니다. 오래된 genc는 일반적으로 긴 "세계 정지"가 멈추는 것을 볼 때 진행되고있는 일입니다.
왜 물어볼 수 있습니까? 런타임/JVM에서 일시 중지되는 이유는 런타임이 힙을 정리할 때 위상 변경이라고 불리는 것을 거쳐야한다는 것입니다. 포인터를 표시하고 스왑하여 사용 가능한 메모리를 최적화하기 위해 응용 프로그램을 실행하는 스레드를 중지합니다. 용인은 주로 일시적인 물건 만 풀어주기 때문에 빠릅니다. 그러나 늙은 세대는 힙에있는 모든 객체를 평가하고 메모리가 부족하면 많은 메모리를 필요로합니다.
왜주의해야할까요? Old gen은 일시 중지 시간에 더 많은 힙을 사용할 때 기하 급수적으로 나 빠지게됩니다. 총 힙 크기가 2-4GB 인 Java 6 (JDK 1.6+)와 같은 최신 런타임에서는 괜찮습니다. 일단 threashold를 초과하면 일시 중지 시간이 기하 급수적으로 증가합니다. 서버를 다시 시작해야하는 일부 클라이언트가 실행되었습니다. 드문 경우이지만 힙이 큰 GC 일시 중지 시간은 전체 다시 시작보다 오래 걸릴 수 있습니다.
거기에 몇 가지 새로운 도구가 꽤 멋지며 GC가 당신의 고통인지 평가하는 데 최첨단을 제공 할 수 있습니다. JHiccup은 하나이며 azulsystems 웹 사이트에서 무료입니다. 현재로서는 리눅스 용이라고 생각합니다. 또한 JVM에는 재구성 된 GC 알고리즘이있어 일시 중지가 발생하지 않지만 비 핵심 응용 프로그램을 사용하는 단일 서버 배포에서는 비용 효과적이지 않을 수 있습니다 (무료는 아닙니다).
요약하면 런타임/JVM/CLR 힙이 2GB 미만이면 더 많은 메모리를 추가하면 도움이됩니다. 약간의 간접비를 주어야합니다. 가능한 경우 힙 크기/메모리 크기를 100 %로 맞추고 싶지는 않습니다. 그것은 긴 멈춤이 가장 길 때입니다. 자신이 필요하다고 생각하는 것 이상으로 20 % 이상의 추가 메모리를 확보하십시오. 그렇게하면 GC 알고리즘이 최적화를 위해 객체를 움직일 여지가 있습니다. 혹시 커질 계획이라면 1990 년경 JVM 기술 (Azul Systems Zing JVM)을 수정하는 도구가 있지만 무료는 아닙니다. 그들은 GC 문제를 진단하기위한 오픈 소스 도구를 제공합니다. JVM은 (내가 해보았을 때) 오버 헤드없이 누출, 버그 또는 로크 (JVM이 이미 다루고있는 데이터를 언젠가 처리하고 타임 스탬핑)를 사용하지 않고보고 할 수있는 실용적인 스레드 레벨 가시성 도구를 가지고있다. 그로 인해 dev 테스트 시간이 많이 절약되었지만 작은 응용 프로그램에는 적합하지 않습니다.
4GB 이하로 유지하십시오. 여분의 헤드 룸을 제공하십시오. 자바/JVM의 GC를 모니터링 할이 플래그를 켤 수 있습니다 원한다면 :
는
java -verbose:gc myProgram
java -Xloggc:D:/log/myLogFile.log -XX:+PrintGCDetails myProgram
당신은 핫스팟이 사용하는 다른 수집가의 일부를 시도 할 수 있습니다. 하나 이상이 있습니다.
Linux를 사용하는 경우 JHiccup 도구를 사용해보십시오. 공짜 야.
나는 Azul Zing jvm이 많은 경우에 "더 좋다"고 지적했다. 앱이 실행되는 동안 그들은 gC를하고 있습니다. 꽤 멋진 재료. 다시 말하지만, 무료는 아니지만, JVM을 조정할 필요성을 없애고 자하는 사람들은이 작업을 수행 할 수 있습니다. 나는 그들이 C4 수집 (동시, 연속, 압축, 컬렉터)이라고 부른다고 생각한다. 최근 Mike McCandless의 벤치 마크에서는 CMS에 대한 Apache Lucene/Solr에서이를 테스트했습니다. 확장 성에서 큰 결과 : http://blog.mikemccandless.com/2012/07/lucene-index-in-ram-with-azuls-zing-jvm.html 내가 게임을 바꿀 때 이것을 따라왔다. –