2017-09-06 2 views
2

Java GC 로그를 검사하지만 GC 유형에 이상한 점이 있습니다. GC 로그에서 발췌있다Java GC 로그가 주요 GC 및 전체 GC에 대해 분명하지 않음 - 시리얼 콜렉터

-XX:+UseSerialGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps 

: 내 테스트 응용 프로그램은 자바에서 이러한 JVM 명령 행 GC 옵션 8u121 64 실행

2017-09-05T22:16:44.677+0200: 1.581: [GC (Allocation Failure) 2017-09-05T22:16:44.678+0200: 1.581: [DefNew: 139765K->17429K(157248K), 0.0936400 secs] 362075K->361613K(506816K), 0.0937556 secs] [Times: user=0.08 sys=0.02, real=0.09 secs] 
2017-09-05T22:16:45.177+0200: 2.081: [GC (Allocation Failure) 2017-09-05T22:16:45.177+0200: 2.081: [DefNew: 157184K->157184K(157248K), 0.0000394 secs]2017-09-05T22:16:45.177+0200: 2.081: [Tenured: 344183K->349561K(349568K), 0.0605620 secs] 501368K->500745K(506816K), [Metaspace: 2831K->2831K(1056768K)], 0.0607333 secs] [Times: user=0.06 sys=0.00, real=0.06 secs] 
2017-09-05T22:16:45.239+0200: 2.142: [Full GC (Allocation Failure) 2017-09-05T22:16:45.239+0200: 2.142: [Tenured: 349561K->349547K(349568K), 0.0450676 secs] 506685K->506671K(506816K), [Metaspace: 2831K->2831K(1056768K)], 0.0451294 secs] [Times: user=0.05 sys=0.00, real=0.04 secs] 

당신은 분명히 첫 번째 줄에 작은 GC로를 볼 수 있듯이 DefNew 컬렉터. GC 로그 here에 대한 기사를 찾았습니다. 두 번째 줄은 전체 GC임을 나타냅니다. 젊은 세대와 구세대, 심지어 메타 공간까지도 수집하기 때문에 옳은 것처럼 보였습니다. 하지만 세 번째 줄에는 어떤 일이 일어 났습니까? 이 로그 항목은 전체 GC라고했습니다. 그러나 그것은 오래된 세대 만 수집했습니다. 로그 항목이 잘못된 것 같습니다 : 두 번째는 전체 gc이고 세 번째는 주요 gc입니다.

그래서 질문 : 왜 "전체 GC"제목은 3 행?

답변

0

두 번째 줄은 실제로 세 번째 줄에보고 된 모음의 일부입니다. -XX:+PrintGC을 사용하면 Full GC로보고됩니다.

gc 로깅은 JDK9에서 통일됩니다. this comparison,이 로깅 st에 대해 설명합니다.