บทความนี้ส่วนใหญ่ศึกษาความเข้าใจของบันทึก GC ในเครื่องเสมือน Java ดังต่อไปนี้
การทำความเข้าใจบันทึก GC เป็นทักษะพื้นฐานในการจัดการกับปัญหาหน่วยความจำเครื่องเสมือน Java
โดยการเพิ่มพารามิเตอร์ลงในประเภทคำสั่ง Java ให้ระบุประเภท GC ที่เกี่ยวข้องให้พิมพ์ข้อมูลบันทึก GC และส่งออกไปยังไฟล์และนโยบายอื่น ๆ
การอ้างอิงคลาสสาธารณะ GC {อินสแตนซ์วัตถุสาธารณะ = null; ส่วนตัวคงที่ int สุดท้าย one_mb = 1024 * 1024; ไบต์ส่วนตัว [] bigsize = byte ใหม่ [2 * one_mb]; void คงที่สาธารณะ (สตริง [] args) {testgc (); referenceCountingGc (); referenceCountinggc objb = new การอ้างอิงใหม่ gc (); obja.instance = objb; objb.instance = obja; obja = null; objb = null; system.gc ();}}}}}}}}}}}}}javac referenceCountinggc.java
java -xx:+printgcdatestamps -xx:+printgcdetails referenceCountinggc
รายการพารามิเตอร์ที่สอดคล้องกัน
-xx:+printgc output gc log
-xx:+printgcdetails outputs บันทึกรายละเอียดของ GC
-xx:+printgctimestamps การประทับเวลาการประทับเวลา GC (ในรูปแบบของเวลาอ้างอิง)
-xx:+printgcdatestamps output การประทับเวลาของ GC (ในรูปแบบของวันที่เช่น 2013-05-04T21: 53: 59.234+0800)
-xx:+printheapatgc พิมพ์ข้อมูลฮีปก่อนและหลัง GC
-xloggc: ../ logs/gc.log path path ของไฟล์บันทึก
ผลลัพธ์ผลลัพธ์:
2016-03-20T14: 34: 55.118-0800: [GC [PSYOUNGGEN: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0.0012070 วินาที]
2016-03-20T14: 34: 55.119-0800: [เต็ม GC [PSYOUNGGEN: 400K-> 0K (38912K)] [PAROLDGEN: 0K-> 282K (87040K)] 400K-> 282K (125952K) secs] [เวลา: ผู้ใช้ = 0.01 sys = 0.00, จริง = 0.01 วินาที]
กอง
Psyounggen รวม 38912K ใช้ 1013K [0x00000007D55000000, 0x00000007D80000000, 0x000000008000000000)
Eden Space 33792K, 3% ใช้ [0x00000007D5500000, 0x00000007D55FD7D0, 0x00000007D76000000)
จาก Space 5120K, 0% ใช้ [0x00000007D7600000, 0x00000007D7600000, 0x00000007D7B000000)
ไปยัง Space 5120K, 0% ใช้ [0x00000007D7B00000, 0x00000007D7B00000, 0x00000007D80000000)
Paroldgen ทั้งหมด 87040K ใช้ 282K [0x0000000780000000, 0x00000007855000000, 0x00000007D55000000)
พื้นที่วัตถุ 87040K, 0% ใช้ [0x0000000780000000, 0x0000000780046BF8, 0x00000007855000000)
pspermgen ทั้งหมด 21504K ใช้ 2628K [0x0000000077a000000, 0x000000077C3000000, 0x00000007800000000)
พื้นที่วัตถุ 21504K, 12% ที่ใช้ [0x000000077A000000,0x00000077B091380,0x000000777C3000000)
Psyounggen หมายถึงคนรุ่นใหม่และชื่อนี้จะถูกกำหนดโดยนักสะสมซึ่งเป็น Scavenge แบบขนาน paroldgen pspermgen อย่างถาวร
คุณจะเห็นว่ามี GC: GC และ GC เต็มสองประเภท มีคำสั่งเต็มรูปแบบที่หยุด-โลกเกิดขึ้นกับ GC ในครั้งนี้
The Clan GC (Minor GC): หมายถึงการดำเนินการรวบรวมขยะที่เกิดขึ้นในกลุ่ม เนื่องจากวัตถุ Java ส่วนใหญ่มีลักษณะของชีวิตและความตาย Minor GC นั้นบ่อยมากและโดยทั่วไปแล้วความเร็วในการรีไซเคิลนั้นเร็วมาก
GC เก่า (Major GC/Full GC): หมายถึง GC ที่เกิดขึ้นในวัยชรา Major GC ปรากฏขึ้นซึ่งมักจะมาพร้อมกับ GC เล็กน้อยอย่างน้อยหนึ่งครั้ง ความเร็วของ GC ที่สำคัญโดยทั่วไปจะช้ากว่า GC เล็กน้อยมากกว่า 10 เท่า
[GC [Psyounggen: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0.0012070 วินาที] [เวลา: ผู้ใช้ = 0.00 SYS = 0.00, จริง = 0.00 วินาที]
6123K-> 400K (38912K) ภายในวงเล็บสี่เหลี่ยมด้านบนระบุว่าพื้นที่หน่วยความจำใช้ความจุก่อน GC -> GC หลังจาก GC และ 38912K ภายในวงเล็บกลมด้านหลังคือความจุรวมของพื้นที่หน่วยความจำ
6123K-> 400K (125952K) นอกวงเล็บสี่เหลี่ยมจัตุรัสหมายความว่ากอง Java ใช้ความจุก่อน GC -> กองจาวาใช้ความจุหลังจาก GC และ 125952K ภายในวงเล็บกลมด้านหลังคือความสามารถทั้งหมดของ Java HEAP
[เวลา: ผู้ใช้ = 0.00 sys = 0.00, จริง = 0.00 วินาที] ตามลำดับแสดงถึงเวลา CPU ที่ใช้โดยผู้ใช้เวลา CPU ที่ใช้โดยสถานะเคอร์เนลและเวลานาฬิกาแขวนที่ผ่านไปตั้งแต่เริ่มต้นการดำเนินการ ความแตกต่างระหว่างเวลา CPU และเวลานาฬิกาแขวนแขวนคือเวลานาฬิกาแขวนจะรวมถึงเวลารอที่ไม่ใช่การทำงานต่างๆเช่นการรอดิสก์ I/O และการรอการบล็อกด้ายในขณะที่เวลา CPU ไม่รวมเวลาเหล่านี้
คุณสามารถใช้เครื่องมือออฟไลน์บางอย่างเพื่อวิเคราะห์บันทึก GC เช่น gchisto ของ Sun (https://java.net/projects/gchisto) และ gcViewer (https://github.com/chewiebug/gcviewer) นี่คือเครื่องมือโอเพ่นซอร์สทั้งหมด ผู้ใช้สามารถดาวน์โหลดซอร์สโค้ดโดยตรงผ่านเครื่องมือควบคุมเวอร์ชันสำหรับการวิเคราะห์ออฟไลน์
ข้างต้นคือทั้งหมดที่เกี่ยวกับการวิเคราะห์บันทึก GC ของ Java Virtual Machine และฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!