ฉันต้องการ จำกัด หน่วยความจำสูงสุดที่ใช้โดย JVM หมายเหตุนี่ไม่ใช่แค่ฮีปฉันต้องการ จำกัด หน่วยความจำทั้งหมดที่ใช้โดยกระบวนการนี้
ฉันต้องการ จำกัด หน่วยความจำสูงสุดที่ใช้โดย JVM หมายเหตุนี่ไม่ใช่แค่ฮีปฉันต้องการ จำกัด หน่วยความจำทั้งหมดที่ใช้โดยกระบวนการนี้
คำตอบ:
-Xms<memory>
-Xmx<memory>
ใช้ข้อโต้แย้ง ใช้M
หรือG
หลังตัวเลขเพื่อระบุ Megs และ Gigs of bytes ตามลำดับ -Xms
แสดงค่าต่ำสุดและ-Xmx
สูงสุด
-Xmx524M
และกระบวนการนี้ใช้ RAM 1.2 GB (?)
คุณไม่ต้องกังวลว่าหน่วยความจำสแต็กจะรั่วไหล (ถือเป็นเรื่องผิดปกติอย่างมาก) ครั้งเดียวที่คุณสามารถทำให้สแต็กหลุดจากการควบคุมได้คือการวนซ้ำแบบไม่มีที่สิ้นสุด (หรือลึกมาก)
นี่เป็นเพียงกอง ขออภัยไม่ได้อ่านคำถามของคุณอย่างละเอียดในตอนแรก
คุณต้องรัน JVM ด้วยอาร์กิวเมนต์บรรทัดคำสั่งต่อไปนี้
-Xmx<ammount of memory>
ตัวอย่าง:
-Xmx1024m
ซึ่งจะทำให้หน่วยความจำสูงสุด 1GB สำหรับ JVM
-XX:MaxDirectMemorySize
ค่อนข้างแน่ใจว่าคุณสามารถควบคุมผ่านทาง. ไม่ใช่ว่าฉันทำโปรไฟล์อย่างหนักเพื่อให้แน่ใจ แต่ก็ยัง;)
MaxDirectMemorySize
มีผลต่อบัฟเฟอร์ NIO เท่านั้น JVM ใช้หน่วยความจำเนทีฟอื่น ๆ ทุกชนิด
หากคุณต้องการ จำกัด หน่วยความจำสำหรับ jvm (ไม่ใช่ขนาดฮีป) ulimit -v
หากต้องการทราบความแตกต่างระหว่างหน่วยความจำ jvm และ heap โปรดดูบทความที่ยอดเยี่ยมนี้ http://blogs.vmware.com/apps/2011/06/taking-a-closer-look-at-sizing-the- Java-process.html
ulimit
คำสั่งลินุกซ์? ฉันทำการค้นหาโดย Google อย่างรวดเร็วและไม่เห็นความสัมพันธ์ใด ๆ ระหว่างulimit
กับ JVM Y
คำตอบข้างต้นนั้นถูกต้องคุณไม่สามารถควบคุมได้อย่างชัดเจนว่ากระบวนการ java จะจัดสรรหน่วยความจำเนทีฟเท่าใด ขึ้นอยู่กับว่าแอปพลิเคชันของคุณกำลังทำอะไรอยู่
ที่กล่าวว่าขึ้นอยู่กับแพลตฟอร์มคุณอาจสามารถใช้กลไกบางอย่างได้เช่น ulimit เพื่อ จำกัด ขนาดของ java หรือกระบวนการอื่น ๆ
อย่าคาดหวังว่ามันจะล้มเหลวอย่างสง่างามหากถึงขีด จำกัด นั้น ความล้มเหลวในการจัดสรรหน่วยความจำเนทีฟนั้นจัดการได้ยากกว่าความล้มเหลวในการจัดสรรบน java heap มีโอกาสที่ดีพอสมควรที่แอปพลิเคชันจะขัดข้อง แต่ขึ้นอยู่กับว่าระบบมีความสำคัญเพียงใดในการลดขนาดกระบวนการที่ยังคงเหมาะกับคุณ
NativeHeap สามารถเพิ่มได้โดย -XX: MaxDirectMemorySize = 256M (ค่าเริ่มต้นคือ 128)
ฉันไม่เคยใช้มัน บางทีคุณอาจพบว่ามีประโยชน์