ฉันติดตั้ง JDK 8 แล้วและพยายามเรียกใช้ Eclipse ฉันได้รับข้อความเตือนต่อไปนี้:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
อะไรคือสาเหตุของการเพิกเฉยตัวเลือก VM นี้?
ฉันติดตั้ง JDK 8 แล้วและพยายามเรียกใช้ Eclipse ฉันได้รับข้อความเตือนต่อไปนี้:
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0
อะไรคือสาเหตุของการเพิกเฉยตัวเลือก VM นี้?
คำตอบ:
เหตุผลที่เพิกเฉยต่อข้อโต้แย้งเหล่านี้คือการสร้างแบบถาวรถูกลบออกใน HotSpot สำหรับ JDK8 เนื่องจากข้อเสียดังต่อไปนี้
พื้นที่สร้างถาวร (PermGen) ได้ถูกลบออกอย่างสมบูรณ์และถูกแทนที่ด้วยพื้นที่ใหม่ที่เรียกว่า Metaspace ผลที่ตามมาของการลบ PermGen คือข้อโต้แย้ง PermSize และ MaxPermSize JVM จะถูกละเว้นและคุณจะไม่ได้รับข้อผิดพลาด java.lang.OutOfMemoryError: PermGen
ข้อดีของ MetaSpace
การปรับ Metaspace
ขนาด metaspace สูงสุดสามารถตั้งค่าได้โดยใช้แฟล็ก -XX: MaxMetaspaceSize และค่าดีฟอลต์คือไม่ จำกัด ซึ่งหมายความว่ามีเพียงหน่วยความจำระบบของคุณเท่านั้น แฟล็กการปรับ -XX: MetaspaceSize กำหนดขนาดเริ่มต้นของ metaspace หากคุณไม่ระบุแฟล็กนี้ Metaspace จะปรับขนาดแบบไดนามิกขึ้นอยู่กับความต้องการของแอปพลิเคชันที่รันไทม์
การเปลี่ยนแปลงช่วยให้การเพิ่มประสิทธิภาพและคุณสมบัติอื่น ๆ ในอนาคต
ยังมีการปรับปรุงสมรรถนะของ GC อีกด้วย รายละเอียดเพิ่มเติม
นี่เป็นหนึ่งในคุณสมบัติใหม่ของ Java 8 ซึ่งเป็นส่วนหนึ่งของข้อเสนอการปรับปรุง JDK 122 :
ลบการสร้างถาวรจาก Hotspot JVM และทำให้จำเป็นต้องปรับขนาดของการสร้างถาวร
รายการ JEPs ทั้งหมดที่จะถูกรวมอยู่ใน Java 8 ที่สามารถพบได้ในJDK8 เหตุการณ์สำคัญหน้า
พื้นที่ถาวรรุ่น (PermGen) ได้ถูกลบออกอย่างสมบูรณ์และถูกแทนที่ด้วยพื้นที่ใหม่ที่เรียกว่า Metaspace ผลที่ตามมาของการกำจัด PermGen คือข้อโต้แย้งที่ชัดเจนว่า PermSize และ MaxPermSize JVM จะไม่ได้รับและคุณจะไม่ได้รับjava.lang.OutOfMemoryError
ข้อผิดพลาด PermGen
JDK 8 HotSpot JVM กำลังใช้หน่วยความจำดั้งเดิมสำหรับการแสดงข้อมูลเมตาของคลาสและเรียกว่า Metaspace อ่านเพิ่มเติม >>
เนื่องจากพื้นที่ PermGen ถูกลบออก การจัดการหน่วยความจำมีการเปลี่ยนแปลงเล็กน้อย
พื้นที่ PermGen ถูกแทนที่ด้วย MetaSpace ใน Java 8 อาร์กิวเมนต์ PermSize และ MaxPermSize JVM จะถูกละเว้นและจะมีการเตือนหากมีการแจ้งเตือนเมื่อเริ่มต้นระบบ
การจัดสรรส่วนใหญ่สำหรับข้อมูลเมตาของคลาสจะถูกจัดสรรออกจากหน่วยความจำดั้งเดิม * คลาสที่ใช้เพื่ออธิบายข้อมูลเมตาของคลาสได้ถูกลบออก
ความแตกต่างที่สำคัญระหว่าง PermGen เก่ากับ MetaSpace ใหม่คือคุณไม่จำเป็นต้องกำหนดขีด จำกัด สูงสุดของการใช้หน่วยความจำ คุณสามารถ จำกัด ขอบเขตของ MetaSpace ได้ ดังนั้นเมื่อการใช้หน่วยความจำเพิ่มขึ้นคุณจะไม่ได้รับข้อผิดพลาด OutOfMemoryError แต่หน่วยความจำดั้งเดิมที่สงวนไว้จะถูกเพิ่มเป็นการเติมการใช้งานหน่วยความจำเพิ่มให้เต็ม
คุณสามารถกำหนดขีด จำกัด สูงสุดของพื้นที่สำหรับ MetaSpace แล้วมันจะโยน OutOfMemoryError: Metadata space ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องกำหนดขีด จำกัด นี้อย่างระมัดระวังเพื่อให้เราสามารถหลีกเลี่ยงการสูญเสียความจำ