ฉันรู้ว่า PermGen คืออะไรใช้เพื่ออะไรทำไมมันถึงล้มเหลววิธีเพิ่ม ฯลฯ
สิ่งที่ฉันไม่รู้คือสิ่งที่ PermGen หมายถึงจริงๆ ปลัด ... เก็น ... บ้าง?
มีใครรู้บ้างว่า PermGen ย่อมาจากอะไร?
ฉันรู้ว่า PermGen คืออะไรใช้เพื่ออะไรทำไมมันถึงล้มเหลววิธีเพิ่ม ฯลฯ
สิ่งที่ฉันไม่รู้คือสิ่งที่ PermGen หมายถึงจริงๆ ปลัด ... เก็น ... บ้าง?
มีใครรู้บ้างว่า PermGen ย่อมาจากอะไร?
คำตอบ:
รุ่นถาวร รายละเอียดเกี่ยวกับการนำหลักสูตรไปใช้โดยเฉพาะ
โดยสังเขปประกอบด้วยอ็อบเจ็กต์ Java ที่เชื่อมโยงกับคลาสและสตริงภายใน ในการใช้งานไคลเอนต์ของ Sun โดยใช้การแชร์บนclasses.jsa
หน่วยความจำจะถูกแมปเพื่อสร้างข้อมูลเริ่มต้นโดยมีประมาณครึ่งอ่านอย่างเดียวและครึ่งสำเนาบนเขียน
วัตถุ Java ที่เก่าแก่จะถูกเก็บไว้ใน Tenured Generation
JVM ใช้ PermGen เพื่อเก็บคลาสที่โหลด คุณสามารถเพิ่มได้โดยใช้:
-XX:MaxPermSize=384m
หากคุณใช้ Sun JVM หรือ OpenJDK
ดังนั้นหากคุณได้รับ OutOfMemoryException: PermGen คุณจำเป็นต้องทำให้ PermGen ใหญ่ขึ้นหรือคุณอาจมีปัญหาในการโหลดคลาส
รุ่นถาวร ดูคู่มือการปรับแต่ง java GCสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับตัวเก็บขยะ
ไม่เกี่ยวข้องกับคำถามเดิมจริงๆ แต่อาจมีคนพบว่ามีประโยชน์ PermGen เป็นพื้นที่ในหน่วยความจำที่ Java ใช้เก็บคลาส ดังนั้นพวกเราหลายคนได้พบกับ OOM ใน PermGen เช่นถ้ามีหลายชั้นเรียน
ตั้งแต่ Java 8 พื้นที่ PermGen ถูกแทนที่ด้วยพื้นที่ MetaSpace ซึ่งมีประสิทธิภาพมากขึ้นและไม่ จำกัด โดยค่าเริ่มต้น (หรือแม่นยำมากขึ้น - ถูก จำกัด ด้วยจำนวนหน่วยความจำเนทีฟขึ้นอยู่กับความพร้อมใช้งานของหน่วยความจำเสมือน 32 หรือ 64 บิต jvm และ OS) อย่างไรก็ตามเป็นไปได้ที่จะปรับแต่งในบางวิธีเช่นการระบุขีด จำกัด สูงสุดสำหรับพื้นที่ คุณสามารถค้นหาข้อมูลที่เป็นประโยชน์เพิ่มเติมได้ในโพสต์บล็อกนี้
PermGen ย่อมาจากGeneration ถาวร
นี่คือการแจ้งสั้น ๆเกี่ยวกับ DDJ
ถ้าจำไม่ผิด gen ย่อมาจาก generation เช่นเดียวกับคนเก็บขยะ generational (ที่ปฏิบัติกับวัตถุที่มีอายุน้อยกว่าต่างจากวัตถุในช่วงกลางชีวิตและ "ถาวร") หลักการของพื้นที่แสดงให้เห็นว่าวัตถุที่เพิ่งสร้างขึ้นจะถูกล้างออกก่อน
Permgen ย่อมาจาก Permanent Generation เป็นหนึ่งในพื้นที่หน่วยความจำ JVM เป็นส่วนหนึ่งของ Heap ที่มีขนาดคงที่โดยใช้แฟล็กที่เรียกว่า MaxPermSize
ทำไมถึงชื่อ PermGen?
Permgen นี้ได้รับการตั้งชื่อในยุคแรกของ Java Permgen mains เก็บข้อมูลเมตาทั้งหมดของคลาสที่โหลด แต่ปัญหาคือเมื่อโหลดคลาสแล้วจะยังคงอยู่ใน JVM จนกว่าจะปิด JVM ดังนั้นชื่อ Permgen จึงเลือกใช้ แต่ต่อมาการโหลดคลาสแบบไดนามิกกลายมาเป็นรูปภาพ แต่ไม่ได้เปลี่ยนชื่อ แต่ด้วยJava 8พวกเขาได้แก้ไขปัญหานั้นเช่นกัน ตอนนี้Permagenถูกเปลี่ยนชื่อเป็นMetaSpaceด้วยขนาดหน่วยความจำแบบไดนามิก