วิธีใดก็ตามที่ควรให้หมายเลขเดียวกันกับคุณ เป็นความคิดที่ดีที่จะจัดสรรฮีปที่ใช้-X..m
-X..x
สำหรับทุกรุ่น จากนั้นคุณสามารถรับประกันและทำ ps เพื่อดูว่าพารามิเตอร์ใดถูกส่งผ่านและถูกนำมาใช้
สำหรับการใช้หน่วยความจำจริงคุณสามารถเปรียบเทียบ VIRT (จัดสรรและแชร์) และ RES (ใช้จริง) เปรียบเทียบกับค่า jstat เช่นกัน:
สำหรับ Java 8 ให้ดูjstatสำหรับค่าเหล่านี้จริง ๆ แล้วหมายถึง สมมติว่าคุณเรียกใช้คลาสที่เรียบง่ายโดยไม่มี mmap หรือการประมวลผลไฟล์
$ jstat -gccapacity 32277
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
215040.0 3433472.0 73728.0 512.0 512.0 67072.0 430080.0 6867968.0 392704.0 392704.0 0.0 1083392.0 39680.0 0.0 1048576.0 4864.0 7225 2
$ jstat -gcutil 32277
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
6.25 0.00 7.96 18.21 98.01 95.29 7228 30.859 2 0.173 31.032
สูงสุด :
NGCMX + S0C + S1C + EC + OGCMX + MCMX + CCSMX
3433472 + 512 + 512 + 67072 + 6867968 + 1083392 + 1048576 = 12 GB
(โดยประมาณใกล้กับด้านล่างถึงหน่วยความจำ VIRT)
สูงสุด (ต่ำสุด, ใช้แล้ว):
215040 + 512 + 512 + 67072 + 430080 + 39680 + 4864 = ~ 1GB
(ประมาณใกล้เคียงกับหน่วยความจำ RES)
"อย่าพูดถึงฉันในสิ่งนี้" แต่ mem VIRT นั้นใกล้เคียงหรือมากกว่าหน่วยความจำสูงสุดที่จัดสรร แต่ตราบใดที่หน่วยความจำที่ใช้นั้นว่าง / มีอยู่ในหน่วยความจำกายภาพ JVM จะไม่ส่งข้อยกเว้นหน่วยความจำ ในความเป็นจริงหน่วยความจำสูงสุดยังไม่ได้ตรวจสอบกับหน่วยความจำกายภาพในการเริ่มต้น JVM แม้ว่าจะมีการสลับบน OS คำอธิบายที่ดีของสิ่งที่หน่วยความจำเสมือนใช้จริงๆโดยกระบวนการ Java จะกล่าวถึงที่นี่
jstat
ควรใช้ตัวเลือกใดเพื่อตรวจสอบการใช้งานหน่วยความจำโดยรวมของ JVM หรือไม่ สมมติว่าคุณเริ่มต้น JVM ด้วยXms=4g
และXmx=4g
คุณต้องการดูว่ามีการใช้หน่วยความจำเท่าใด