หมายเหตุการเรียนรู้ JVM: การจัดการหน่วยความจำ JVM และแนวคิดการรวบรวมขยะ JVM โครงสร้างหน่วยความจำ JVM ประกอบด้วยฮีปสแต็กสแต็กวิธีการท้องถิ่นพื้นที่วิธีการและส่วนอื่น ๆ นอกจากนี้ JVM ยังใช้กลไกการรวบรวมขยะที่แตกต่างกันสำหรับที่อยู่ดาวน์โหลดของรุ่นใหม่และรุ่นเก่าตามลำดับ
ก่อนอื่นมาดูโครงสร้างหน่วยความจำ JVM ซึ่งประกอบด้วยกองซ้อนสแต็กวิธีการในพื้นที่พื้นที่วิธีการและส่วนอื่น ๆ แผนภาพโครงสร้างแสดงอยู่ด้านล่าง
JVM การเรียนรู้หมายเหตุการจัดการหน่วยความจำ JVM และ JVM Garbage Collection
โครงสร้างหน่วยความจำ JVM
โครงสร้างหน่วยความจำ JVM ประกอบด้วยฮีปสแต็กสแต็กวิธีการท้องถิ่นพื้นที่วิธีการและส่วนอื่น ๆ แผนภาพโครงสร้างมีดังนี้:
1) กอง
หน่วยความจำของวัตถุทั้งหมดที่สร้างขึ้นโดยใหม่จะถูกจัดสรรในกองและขนาดของมันสามารถควบคุมได้โดย -xmx และ -xms กองถูกแบ่งออกเป็น ceponymous และรุ่นเก่าและ ceponymous จะถูกแบ่งออกเป็นเขตอีเดนและโซนผู้รอดชีวิต ในที่สุดผู้รอดชีวิตก็ประกอบด้วย From -Space และ Tospace แผนภาพโครงสร้างมีดังนี้:
คนรุ่นใหม่ วัตถุใหม่ได้รับการจัดสรรหน่วยความจำโดยคนรุ่นใหม่ เมื่อเอเดนไม่เพียงพอวัตถุที่รอดชีวิตจะถูกถ่ายโอนไปยังผู้รอดชีวิต ขนาดของรุ่นใหม่สามารถควบคุมได้โดย -xmn หรือ -xx: Survivorratio สามารถใช้ในการควบคุมอัตราส่วนของ Eden และ Survivor ใช้ในการจัดเก็บวัตถุที่รอดชีวิตจากคอลเล็กชั่นขยะหลายแห่งในรุ่นใหม่
2) สแต็ก
เมื่อแต่ละเธรดดำเนินการแต่ละวิธีมันจะใช้สำหรับเฟรมสแต็กในสแต็ก แต่ละเฟรมสแต็กมีพื้นที่ตัวแปรท้องถิ่นและตัวถูกดำเนินการสแต็กซึ่งใช้ในการจัดเก็บตัวแปรชั่วคราวพารามิเตอร์และผลลัพธ์ระดับกลางในระหว่างการเรียกวิธีการนี้
3) สแต็ควิธีการในท้องถิ่น
ใช้เพื่อสนับสนุนการดำเนินการของวิธีการดั้งเดิมจัดเก็บสถานะของการโทรแบบดั้งเดิมแต่ละวิธี
4) พื้นที่วิธีการ
เก็บข้อมูลคลาสที่จะโหลดตัวแปรคงที่และค่าคงที่ประเภทสุดท้ายแอตทริบิวต์และข้อมูลวิธีการ JVM ใช้การถาวรเพื่อจัดเก็บพื้นที่วิธีการและค่าต่ำสุดและค่าสูงสุดสามารถระบุได้โดย -xx: Permsize และ -xx: Maxpermsize หลังจากแนะนำโครงสร้างหน่วยความจำ JVM มาดูที่ที่อยู่ดาวน์โหลดของกลไกการรวบรวม JVM Garbage
กลไกการรวบรวมขยะ JVM
JVM ใช้กลไกการรวบรวมขยะที่แตกต่างกันสำหรับคนรุ่นใหม่และรุ่นเก่าตามลำดับ
GC รุ่นใหม่:
ceponymous มักจะมีเวลารอดชีวิตสั้น ๆ ดังนั้นจึงถูกนำกลับมาใช้ใหม่ตามอัลกอริทึมการคัดลอก อัลกอริทึมการคัดลอกที่เรียกว่าจะสแกนวัตถุที่รอดชีวิตและคัดลอกไปยังพื้นที่ที่ไม่ได้ใช้ใหม่อย่างสมบูรณ์ซึ่งสอดคล้องกับ ceponymous ซึ่งคือการคัดลอกระหว่าง Eden และ Fromspace หรือ Tospace คนรุ่นใหม่ใช้ตัวชี้ที่ไม่ได้ใช้งานเพื่อควบคุมการทริกเกอร์ GC ตัวชี้เก็บวัตถุที่จัดสรรสุดท้ายในช่วงเวลารุ่นใหม่ เมื่อมีวัตถุใหม่ในการจัดสรรหน่วยความจำจะใช้เพื่อตรวจสอบว่าพื้นที่เพียงพอหรือไม่ ถ้ายังไม่เพียงพอมันจะกระตุ้น GC เมื่อวัตถุได้รับการจัดสรรอย่างต่อเนื่องวัตถุจะค่อยๆเปลี่ยนจากอีเด็นไปยังผู้รอดชีวิตและในที่สุดก็เป็นรุ่นเก่า
ใช้ javavisualvm เพื่อดูอย่างชัดเจนและสังเกตว่าหลังจากรุ่นใหม่เต็มแล้ววัตถุจะถูกถ่ายโอนไปยังรุ่นเก่าแล้วชัดเจนและโหลดต่อไป เมื่อรุ่นเก่าเต็มจะมีการรายงานข้อยกเว้น outofmemory ดังแสดงในรูปด้านล่าง:
ในแง่ของกลไกการดำเนินการ JVM ให้บริการ GC แบบอนุกรม (serialGC), การรีไซเคิลแบบขนาน GC (Parallelscavenge) และ GC แบบขนาน (Parnew)
1) อนุกรม GC
กระบวนการสแกนและการคัดลอกทั้งหมดดำเนินการในรูปแบบเดียว เหมาะสำหรับแอปพลิเคชันที่มี CPU เดี่ยวพื้นที่ขนาดเล็กในรุ่นใหม่และไม่สูงมากสำหรับเวลาหยุดชั่วคราว มันเป็นวิธี GC เริ่มต้นที่ระดับไคลเอนต์ มันสามารถถูกบังคับให้ระบุผ่าน -xx:+eserialgc
2) การรีไซเคิลแบบขนานของ GC
กระบวนการสแกนและการจำลองทั้งหมดดำเนินการในลักษณะหลายเธรด เหมาะสำหรับมัลติ CPU และแอปพลิเคชันที่มีความต้องการเวลาหยุดชั่วคราวสั้น ๆ เป็นวิธี GC ที่ใช้โดยระดับเซิร์ฟเวอร์โดยค่าเริ่มต้น มันสามารถใช้เพื่อบังคับสเปคของ -xx:+useparallelgc และใช้ -xx: parallelgcthreads = 4 เพื่อระบุจำนวนเธรด
3) GC แบบขนาน
ใช้กับ GC รุ่นเก่าพร้อมกัน
GC รุ่นเก่า:
แตกต่างจากคนรุ่นใหม่วัตถุมีชีวิตรอดเป็นเวลานานและค่อนข้างเสถียร ดังนั้นอัลกอริทึมมาร์คจึงใช้ในการรีไซเคิล เครื่องหมายที่เรียกว่าหมายถึงการสแกนวัตถุที่รอดชีวิตจากนั้นรีไซเคิลวัตถุที่ไม่มีเครื่องหมาย หลังจากรีไซเคิลพื้นที่ว่างจะถูกรวมหรือทำเครื่องหมายเพื่อจัดสรรง่ายในครั้งต่อไป กล่าวโดยย่อคือจำเป็นต้องลดการสูญเสียประสิทธิภาพที่เกิดจากการกระจายตัวของหน่วยความจำ ในแง่ของกลไกการดำเนินการ JVM ให้บริการอนุกรม GC (SerialMSC), GC แบบขนาน (ParallelMSC) และ GC (CMS) พร้อมกัน รายละเอียดอัลกอริทึมเฉพาะจะต้องมีการศึกษาเพิ่มเติม
กลไก GC ข้างต้นจำเป็นต้องใช้ร่วมกันและวิธีการที่ระบุจะแสดงในตารางต่อไปนี้:
ข้างต้นเป็นเนื้อหาทั้งหมดของความเข้าใจเชิงลึกเกี่ยวกับหลักการทำงานของ Java GC ที่บรรณาธิการนำมาให้คุณ ฉันหวังว่าทุกคนจะสนับสนุน wulin.com เพิ่มเติม ~