2014-12-26 5 views
0

JAVA 응용 프로그램의 속도를 높이고 다음과 같은 질문을하고 싶습니다. 미리 감사드립니다. 새로운 세대를위한 최적화 가비지 수집 방법은 무엇입니까?

1 HotSpot JVM 젊은 세대의 경우 eden에서 가장 새로 할당 된 객체에 대해 (gc) 가비지 수집을 건너 뛸 수 있습니까? 예를 들어, eden 영역에서 상위 30 %의 대부분의 최신 객체를 건너 뜁니다.

2 어떻게 새로운 세대의 시간을 단축 할 수 있습니까? 워크 플로의 응답 시간은 10 밀리 초 미만인 것으로 예상되지만 새로 생성하는 경우에만 gc의 복사 프로세스에는 8 밀리 초가 걸립니다.

답변

0

응용 프로그램 성능에 대한 오버 헤드를 줄이기 위해 최적화해야하는 GC의 특정 특성이 있습니다. 처리량과 지연 시간과 같이 이러한 GC 특성은 여러 GC주기를 거치면서 트래픽 변동을 처리 할 수 ​​있도록 장기 실행 테스트에서 관찰해야합니다. 1. 세계 표준화되지 않은 수집기는 응용 프로그램 스레드를 일시 중지하여 가비지를 수집합니다. 이러한 일시 중지 기간 및 빈도는 애플리케이션의 SLA 준수 능력에 부정적인 영향을 미치지 않아야합니다. 2. 동시 GC 알고리즘은 CPU주기의 응용 프로그램 스레드와 경쟁합니다. 이 오버 헤드는 응용 프로그램 처리량에 영향을 미치지 않습니다. 3. 비 압축 GC 알고리즘으로 인해 힙 조각화가 발생할 수 있으며 전체 GC로 인해 세계에서 멈춤이 길어집니다. 힙 분할은 최소한으로 유지되어야합니다. 가비지 수집 작업을하려면 메모리가 필요합니다. 특정 GC 알고리즘은 다른 알고리즘보다 메모리 풋 프린트가 높습니다. 응용 프로그램에 큰 힙이 필요한 경우 GC의 메모리 오버 헤드가 크지 않은지 확인하십시오. 4. 코드 복잡성이 증가하거나 작업 부하 특성이 변경되는 경우 GC 동작을 쉽게 조정하려면 GC 로그와 일반적으로 사용되는 JVM 매개 변수를 명확하게 이해해야합니다.

그리고이 항목 :

https://engineering.linkedin.com/garbage-collection/garbage-collection-optimization-high-throughput-and-low-latency-java-applications

1

1 핫스팟 JVM 젊은 세대의 경우, 에덴에서 가장 새로 할당 된 개체에 대한 가비지 컬렉션 (GC)를 건너 뛸 수 있습니까? 예를 들어, eden 영역에서 상위 30 %의 가장 최신 객체를 건너 뜁니다.

에덴을 청소하면 모든 것이 든 없어도됩니다. 가장 새로운 객체는 생존자 공간에있을 가능성이 높으며 다음 컬렉션에서 정리됩니다.

2 어떻게 새로운 세대의 시간을 단축 할 수 있습니까? 워크 플로의 응답 시간은 10 밀리 초 미만일 것으로 예상되지만, 신세대만을위한 GC의 복사 프로세스에는 8 밀리 초가 소요됩니다.

JVM은 하드 실시간 시스템이 아닙니다. 즉, GC 없이도 10ms 동안 일시 중지 될 가능성이 항상 있음을 의미합니다. 10ms 응답을 말하는 대신, 더 현실적인 목표는 < 10ms 99 %의 시간을 갖는 것입니다. 이것은 몇몇 작은 수집을 허용합니다.

GC 일시 중지 시간을 줄이려면 다음 중 하나를 수행하십시오. Azul Zing은 동시 컬렉터 (상업용)를 사용하거나 쓰레기의 양을 하루에 에덴의 크기보다 적게 줄이면됩니다. 예 : eden 크기를 24GB로 설정하고 시간당 1GB 미만으로 생성하십시오.

1

어떻게 새로운 세대의 시간을 단축 할 수 있습니까?

  • 이 더 자주하지만 짧은 젊은 세대를 이끌어 갈
    • 젊은 세대의 크기를 줄일 다중 스레드 GC 알고리즘 (ParNew, ParallelScavenge 또는 G1GC)를 사용하고 있는지 확인 GC 및 더 많은 늙은 세대 컬렉션을 의미하는 승격 된 개체
    • 응용 프로그램의 개체 할당을 프로파일 링하고 핫스팟을 최적화하여 할당 속도를 줄일 수 있습니다.
  • 문제에 던져 돈 : 그것을 더 빠른 CPU/메모리 대역폭을
  • 던져 더 많은 돈을받을 : 아줄 활기