이 기사는 주로 Java 가상 머신의 GC 로그에 대한 이해를 다음과 같이 연구합니다.
GC 로그를 이해하는 것은 Java 가상 머신 메모리 문제를 다루는 기본 기술입니다.
Java 명령 유형에 매개 변수를 추가하면 해당 GC 유형을 지정하고 GC 로그 정보를 인쇄하여 파일 및 기타 정책으로 출력하십시오.
public class referenceCountinggc {public object instance = null; 개인 정적 최종 최종 int one_mb = 1024 * 1024; private byte [] bigte [] bigtsize = new byte [2 * one_mb]; public static void main (string [] argss) {testgc ();} public static void testgc () {referencecounting vja = new 참조 컨트로팅 gc (); 참고 문헌 objb = new referenceCountinggc (); obja.instance = objb; objb.instance = obja; obja = null; null; system.gc ();}}javac 참조 컨트로 팅크 .java
java -xx :+printgcdatestamps -xx :+printgcdetails referencecountinggc
해당 매개 변수 목록
-xx :+printgc 출력 GC 로그
-xx :+printgcdetails 출력 GC의 자세한 로그
-xx :+printgctimestamps 타임 스탬프 출력 GC (참조 시간 형태)
-xx :+printgcdatestamps 출력 GC의 타임 스탬프 (2013-05-04T21 : 53 : 59.234+0800과 같은 날짜 형태)
-XX :+프린트 피아 팻 GC GC 전후에 힙 정보를 인쇄합니다.
-xloggc : ../ logs/gc. 로그 파일의 출력 경로
결과 출력 :
2016-03-20T14 : 34 : 55.118-0800 : [GC [Psyounggen : 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0.0012070 SECS] [user = 0.00 sys = 0.00, 실제 = 0.00 SECS]
2016-03-20T14 : 34 : 55.119-0800 : [Full GC [Psyounggen : 400k-> 0K (38912k)] [Paroldgen : 0K-> 282K (87040K)] 400K-> 282K (125952K) [PSPERMGEN : 2622K-> 2621K (21504K)] 0.0084640 초] [시간 : user = 0.01 sys = 0.00, real = 0.01 secs]
더미
PSYOUNGGEN 총 38912K, 사용 1013K [0x00000007D55000000, 0x00000007D80000000, 0x000000008000000000)
Eden Space 33792K, 3% 사용 [0x00000007D5500000, 0x00000007D55FD7D0, 0x00000007D76000000)
우주 5120K, 0% 사용 [0x00000007D7600000, 0x00000007D7600000, 0x00000007D7B000000)
우주 5120K, 0% 사용 [0x00000007D7B00000, 0x00000007D7B00000, 0x00000007D80000000)
Paroldgen Total 87040K, 사용 된 282k [0x0000000780000000, 0x00000007855000000, 0x00000007D55000000)
객체 공간 87040K, 0% 사용 [0x0000000780000000, 0x0000000780046BF8, 0x00000007855000000)
PSPERMGEN TOTAL 21504K, 사용 된 2628K [0x000000000077AE000000, 0X000000077C3000000, 0X00000007800000000)
객체 공간 21504K, 12% 사용 [0x000000077AE000000,0X00000077B091380,0X0000007777C3000000)
Psyounggen은 새로운 세대를 의미 하며이 이름은 수집가에 의해 결정되며, 이는 평행 한 청소입니다. Paroldgen, 영구적으로 pspermgen
GC의 두 가지 유형이 있음을 알 수 있습니다 : GC와 Full GC. 이번에는 STOP-The World가 GC에 일어난다는 전체 진술이 있습니다.
클랜 GC (Minor GC) : 클랜에서 발생하는 쓰레기 수집 동작을 나타냅니다. 대부분의 Java 물체는 생명과 죽음의 특성을 가지고 있기 때문에 작은 GC는 매우 빈번하며 일반적으로 재활용 속도는 매우 빠릅니다.
구형 GC (주요 GC/Full GC) : 노년기에 발생하는 GC를 나타냅니다. 주요 GC가 나타나며, 종종 작은 GC가 적어도 한 번은 동반됩니다. 주요 GC의 속도는 일반적으로 작은 GC보다 10 배 이상 느립니다.
[GC [Psyounggen : 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0.0012070 초] [시간 : user = 0.00 sys = 0.00, real = 0.00 secs]
위의 정사각형 브래킷 내부의 6123K-> 400K (38912K)는 메모리 영역이 GC 이후 GC-> GC 이전의 용량을 사용했으며 둥근 브래킷 내부의 38912K는 메모리 영역의 총 용량임을 나타냅니다.
사각형 괄호 외부의 6123K-> 400K (125952K)는 Java 힙합이 GC-> 이전에 용량을 사용했음을 의미합니다. Java 힙은 GC 이후 용량을 사용했으며 뒤의 둥근 괄호 안에있는 125952K는 Java Heap의 총 용량입니다.
[시간 : user = 0.00 sys = 0.00, real = 0.00 secs]는 각각 사용자가 소비 한 CPU 시간, 커널 상태에 의해 소비되는 CPU 시간을 나타냅니다. 벽 시계 시간은 작동 시작부터 작업 끝까지 경과했습니다. CPU 시간과 벽 시계 시간의 차이점은 벽 시계 시간에 디스크 I/O 대기 및 스레드 차단 대기와 같은 다양한 비 기능 대기 시간이 포함되지만 CPU 시간에는이 시간을 포함하지 않는다는 것입니다.
Sun 's Gchisto (https://java.net/projects/gchisto) 및 gcviewer (https://github.com/chewiebug/gcviewer)와 같은 GC 로그를 분석 할 수 있습니다. 이것들은 모두 오픈 소스 도구입니다. 사용자는 오프라인 분석을 위해 버전 제어 도구를 통해 소스 코드를 직접 다운로드 할 수 있습니다.
위의 내용은 Java Virtual Machine의 GC 로그 분석에 관한 것이며, 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!