2012-11-30 3 views
2

대기 시간이 민감한 앱에는 캐싱 데이터 (TG에 있음)와 수명이 짧은 오브젝트가 YG에서 사라집니다. 마이너 GC 시간과 주요 GC 시간에 큰 차이가 있음을 확인했습니다. 나는 그것이 TG의 비교적 큰 크기와 관련이 있다고 생각했다. GC 시간이 TG 크기과 어떻게 관련되는지 설명 할 수 있습니까? 보조 GC는 꽤 자주 빠르고 빠릅니다.자바 GC 메이저 GC 대 마이너 GC

+1

사소한 부분은 대개 중지 및 복사되며, 주요 부분은 동시에 마크 앤 스위핑입니다. 너무 큰 풀을 복사 할 때 너무 자주 멈추지 않는 것이 좋습니다. –

답변

0

요점은 GC 시간은 TG 크기가 아니라 그 안에있는 객체의 수입니다. 성능에 민감한 응용 프로그램은 캐싱을 위해 힙을 사용하지 않아야합니다. 오프 힙 캐시를 지원하는 광범위한 기존 캐싱 라이브러리가 있습니다.

+0

오프 힙 캐시에서 성능이 저하 될 것이라고 읽었습니다. 캐시 된 객체는 키 값 쌍이 아니라 하나의 큰 객체입니다. 우리는 너무 빈번하게 (초당 10000 번) 동시에 전체 객체에 액세스해야합니다. –

+0

초당 1000 회는 매우 낮은 속도이지만, 하나의 큰 개체 인 경우 실제로는 오프 힙 캐시의 문제입니다. GC 속도는 개체에 대한 단일 루트 참조를 사용하지만 개체에서 도달 할 수있는 인스턴스의 총 개수로 계산되므로주의해야합니다. –

1

YG의 마이너 컬렉션에서 살아남은 개체는 TG/Old 세대로 이동하여 YG에서 공간을 확보합니다. YG의 크기를 작게 유지하여 마이너 컬렉션에 시간이 많이 걸리지 않고 더 자주 실행할 수 있습니다.. 그리고 여전히 참조가있는 작은 GC 개체는 TG로 이동합니다.

TG 크기가 더 큰 이유는 대개 YG 클린업에서 생존하는 큰 물체가이 세그먼트으로 이동하기 때문입니다. 또한 TG에서 정리 작업이 자주 실행되지 않아 더 큰 메모리가 할당 될 수 있습니다.

그래서 마이너 GC는 YG에서 개체를 정리하지만 TG는 물론 YG도 주요 GC에서 정리합니다.