การตั้งค่าพารามิเตอร์ทดสอบ:
1. การวนซ้ำเพื่อเรียก A () ใหม่เพื่อให้ได้กองล้น, java.lang.outofMemoryError: พื้นที่ java heap,
พารามิเตอร์เครื่องเสมือน: -xms1m -xmx1m -xx:+heapdumponoutofmemoryError, คำอธิบาย: การตั้งค่า -xmx และ -xms ไปยังเดียวกันสามารถหลีกเลี่ยงการขยายตัวอัตโนมัติของกอง -xx:+heapdumponoutofmemoryError อนุญาตให้เครื่องเสมือนจริงทิ้งสแน็ปช็อตการถ่ายโอนข้อมูลหน่วยความจำฮีปในปัจจุบันเมื่อมีการยกเว้นหน่วยความจำล้น
// ในขณะที่ (จริง) {// ใหม่ a (). do2 (); //}2. การวนซ้ำเพื่อเรียกการอ้างอิงวัตถุเพื่อให้ได้สแต็กล้น java.lang.stackoverflowerror
พารามิเตอร์เครื่องเสมือน: -xSS128K,
คำอธิบาย: ตั้งค่าขนาดของสแต็คเครื่องเสมือนเป็น 128kN
ภายใต้เธรดเดียวข้อผิดพลาดข้างต้นจะถูกโยนลงโดยไม่คำนึงว่าเฟรมสแต็กมีขนาดใหญ่เกินไปหรือความจุสแต็กเครื่องเสมือนมีขนาดเล็กเกินไปและไม่สามารถจัดสรรหน่วยความจำได้
เป็นโมฆะ do2 () {do2 ();};3. การวนซ้ำเพื่อเรียกใช้สตริง. intern () วิธีเขียนลงในพูลคงที่และสระว่ายน้ำคงที่ล้น java.lang.outofMemoryError: Permgen Space
ในขณะที่ (จริง) {list.add (string.valueof (i ++). intern ()); -พารามิเตอร์เครื่องเสมือน: -xx: permsize = 10m -xx: maxpermsize = 10m,
คำอธิบาย: ระบุความสามารถและความจุสูงสุดของการสร้างถาวรที่จัดสรรโดย JVM (พื้นที่ถาวรมีหน่วยความจำไม่เพียงพอและทั้งหมดอยู่ในกองหลังจาก 1.8. เมธอดพื้นที่ = การสร้างถาวรพื้นที่ permgen "นั่นคือรุ่นถาวร)
สถานะอ้างอิงสี่สถานะ: (การสืบทอดคลาสขยายความอ่อนแอ <AR>)
1. ใบเสนอราคาที่แข็งแกร่ง: Object OBJ = วัตถุใหม่ () ตราบใดที่ใบเสนอราคาที่แข็งแกร่งยังคงมีอยู่นักสะสมขยะจะไม่เก็บรวบรวมวัตถุที่อ้างอิง
2. Softreference: Softreference วัตถุที่เกี่ยวข้องกับการอ้างอิงที่อ่อนนุ่มจะถูกรีไซเคิลเมื่อมีหน่วยความจำไม่เพียงพอ หากมีหน่วยความจำไม่เพียงพอในการรีไซเคิลครั้งนี้จะมีการโยนข้อยกเว้นล้นหน่วยความจำ Softreference <byte []> sr = new Softreference <byte []> (ไบต์);
3. การอ้างอิงที่อ่อนแอ: การอ้างอิงที่อ่อนแอวัตถุที่เกี่ยวข้องกับการอ้างอิงที่อ่อนแอสามารถอยู่รอดได้จนกว่าจะมีการรวบรวมขยะครั้งต่อไป
4. การอ้างอิงเสมือนจริง: phantomreference, การอ้างอิงเสมือนจริงใช้เพื่อติดตามสถานะการรีไซเคิลของวัตถุ
เวลาชั่วคราวในการเรียกใช้ GC:
1. เมื่อคนรุ่นใหม่หรือรุ่นเก่าเต็มเครื่องเสมือน Java จะไม่สามารถจัดสรรพื้นที่หน่วยความจำสำหรับวัตถุใหม่ได้อีกต่อไปเครื่องเสมือน Java จะทำให้ GC สามารถรีไซเคิลวัตถุที่จะไม่ถูกใช้อีกต่อไป
2. System.gc (), runtime.getruntime (). วิธี GC () มักจะกระตุ้น GC เต็มรูปแบบและอย่างน้อยหนึ่ง GC เล็กน้อยและอาจไม่ได้รีไซเคิลทันที
3. ทริกเกอร์เมื่อเซิร์ฟเวอร์ไม่ได้ใช้งานหรือผู้สูงอายุอยู่ในกอง
รีไซเคิลพื้นที่ที่ถูกครอบครองโดยวัตถุที่ไม่มีการอ้างอิงไม่ใช่วัตถุเอง
แต่มันก็ไม่สามารถคาดเดาได้ในจุดที่กลไกการรวบรวมขยะจริงจะเริ่มดำเนินการ (แหล่งที่มาของ Unopen) ซึ่งเป็นหลักการเดียวกับเธรด preemptive เมื่อมันมีผล
อัลกอริทึมการรวบรวม Generational:
นักสะสมรุ่นใหม่และนักสะสมรุ่นอาวุโส
อัลกอริทึมการล้างมาร์ค
อัลกอริทึมการทำเครื่องหมาย
ความแตกต่างระหว่างหน่วยความจำล้นและการรั่วไหลของหน่วยความจำ:
1. หน่วยความจำล้น: โปรแกรมไม่มีพื้นที่เพียงพอเมื่อจัดสรรหน่วยความจำ
2. การรั่วไหลของหน่วยความจำ: หลังจากโปรแกรมใช้กับหน่วยความจำมันไม่มีทางที่จะเพิ่มหน่วยความจำให้เพิ่มขึ้น มันมักจะครอบครองหน่วยความจำนั่นคือวัตถุที่จัดสรรสามารถเข้าถึงได้ แต่ไร้ประโยชน์ การรั่วไหลของหน่วยความจำมักเกิดจากวัตถุขนาดใหญ่ในหน่วยความจำ แต่ไม่สามารถปล่อยออกมาได้ จะทำให้หน่วยความจำล้น
ขนานและพร้อมกัน:
1. ขนาน: หมายถึงการทำงานของเธรดสะสมขยะหลายตัว
2. การเกิดขึ้นพร้อมกัน: หมายถึงเธรดผู้ใช้และเธรด Garbage Collector ทำงานพร้อมกัน
กลไกการโหลดคลาส:
1. การโหลด (การสร้าง Java.lang.Class Object), การตรวจสอบ, การเตรียมการ, การแยกวิเคราะห์, การเริ่มต้น (กระบวนการกำหนด), ใช้ (ใช้) และการขนถ่าย (การขนถ่าย)
2. ตรวจสอบ (ไม่ว่าข้อมูลที่มีอยู่ในสตรีมไบต์นั้นถูกต้องหรือไม่และเป็นไปตาม JVM หรือไม่)
เตรียม (กำหนดค่าให้กับตัวแปรคลาสเช่นตัวแปรคงที่, กำหนด 0)
สามส่วนของการแยกวิเคราะห์ (แทนที่การอ้างอิงเชิงสัญลักษณ์ด้วยการอ้างอิงโดยตรงไฟล์คลาสไปยังหน่วยความจำ) เรียกว่าการเชื่อมโยง (การเชื่อมโยง)
3. ขั้นตอนการโหลด: รับกระแสไบนารีของไฟล์. class;
ใส่เนื้อหาของข้อมูลคลาสตัวแปรคงที่ไบต์และค่าคงที่ลงในพื้นที่วิธีการ
สร้างวัตถุ java.lang.class ที่แสดงไฟล์. class นี้ในหน่วยความจำเป็นพอร์ทัลการเข้าถึงสำหรับข้อมูลต่าง ๆ ในพื้นที่วิธีการของคลาสนี้
4. สิ่งที่คุณทำในขั้นตอนการเริ่มต้นคือการเรียกใช้เมธอดไคลเอนต์> เพื่อกำหนดตัวแปรสแตติกให้กับค่าที่ผู้ใช้ระบุและดำเนินการบล็อกรหัสคงที่
รูปแบบการมอบหมายหลัก: (เริ่มคลาสโหลดเดอร์> ตัวโหลดคลาสเพิ่มเติม> แอปพลิเคชันคลาสโหลดเดอร์> ตัวโหลดคลาสที่กำหนดเอง)
ตัวโหลดคลาสได้รับคำขอโหลดคลาสและมอบหมายคำขอไปยังตัวโหลดคลาสแม่เพื่อให้เสร็จสมบูรณ์ หลังจากชั้นเรียนหลักไม่สามารถทำให้เสร็จได้มันจะทำให้เสร็จสมบูรณ์ด้วยตัวเอง
หลักการของการเกิดขึ้น:
เป็นไปไม่ได้ที่จะพึ่งพาการซิงโครไนซ์และผันผวนเพียงอย่างเดียวเพื่อ จำกัด ลำดับในหน่วยความจำ Java ขึ้นอยู่กับกฎการสั่งซื้อของโปรแกรมเพื่อกำหนดลำดับของตัวตั้งค่าและ getters
Minor GC: ทำความสะอาดหน่วยความจำเข็มขัดรุ่นเยาว์ไม่สามารถจัดสรรพื้นที่สำหรับวัตถุใหม่ได้
Major GC: มันคือการทำความสะอาดวัยชราและ GCs ที่สำคัญจำนวนมากถูกกระตุ้นโดย Minor GC
Full GC: มันคือการทำความสะอาดพื้นที่กองทั้งหมด - รวมถึงคนรุ่นใหม่และคนรุ่นเก่า