แฟล็ก UseCompressedOops JVM ทำอะไรและฉันควรใช้เมื่อใด


85

แฟล็ก HotSpot JVM -XX:+UseCompressedOopsทำอะไรและฉันควรใช้เมื่อใด ฉันจะเห็นความแตกต่างของประสิทธิภาพและการใช้งานหน่วยความจำประเภทใดเมื่อใช้บนอินสแตนซ์ Java 64 บิต (เทียบกับไม่ได้ใช้งาน)


1
มันบีบอัดตัวชี้ 64 บิต คุณจะเห็นการขยายตัวของหน่วยความจำที่ลดลงจากขนาดตัวชี้ที่เพิ่มขึ้นใช้เวลาน้อยลงใน GC อาจมีประสิทธิภาพลดลงเล็กน้อย jdk1.6.0_22 เป็น Sun JVM สุดท้ายที่ปิดแฟล็กนี้โดยค่าเริ่มต้น
sjr

คำตอบ:


87

HotSpot JVM ส่วนใหญ่ในปีที่แล้วเปิดใช้งานโดยค่าเริ่มต้น ตัวเลือกนี้ช่วยให้การอ้างอิงเป็น 32 บิตใน JVM 64 บิตและเข้าถึงฮีปได้ใกล้เคียงกับ 32 GB (พอยน์เตอร์ได้มากกว่า 32 บิต) (คุณสามารถมีหน่วยความจำฮีปปิดได้ไม่ จำกัด เช่นกัน) วิธีนี้สามารถประหยัดหน่วยความจำจำนวนมากและอาจปรับปรุงประสิทธิภาพได้

หากคุณต้องการใช้ตัวเลือกนี้ฉันขอแนะนำให้คุณอัปเดตเป็นเวอร์ชันที่เปิดไว้โดยค่าเริ่มต้นเนื่องจากอาจมีเหตุผลที่ดีเช่นข้อบกพร่องเหตุใดจึงไม่เปิดใช้งานก่อนหน้านี้ ลองใช้ Java 6 update 23 หรือ Java 7 update 5

ในระยะสั้นอย่าเปิดใช้เวอร์ชันที่เปิดไว้โดยค่าเริ่มต้น


อัปเดต:

ใน Java 8 คุณมีตัวเลือกในการตั้งค่า-XX:ObjectAlignmentInBytes=และในความเป็นจริงถ้าคุณฮีปขนาดเป็น 64 GB จะใช้-XX:ObjectAlignmentInBytes=16และยังคงใช้การอ้างอิงแบบ 32 บิต


ฉันอ่านบทความนี้: community.oracle.com/message/10019916 ซึ่งระบุว่าเราควรใช้แฟล็กนี้ด้วยตนเองเสมอแม้ว่าจะเปิดใช้งานตามค่าเริ่มต้นก็ตาม ความคิดใด ๆ ?
vanval

1
@vanval ที่แนะนำถ้าคุณใช้JE cache นี่เป็นเพราะมันไม่สามารถสรุปได้ว่าคุณกำลังใช้การบีบอัดโอ๊ะโอหรือไม่ด้วยเหตุผลบางประการ ฉันนึกถึงวิธีการบางอย่างที่สามารถบอกคุณได้ คุณไม่จำเป็นต้องระบุในบรรทัดคำสั่ง IMHO เว้นแต่คุณต้องการให้ JVM ล้มเหลวหากไม่ได้เปิดใช้งาน เช่นคุณมีฮีป 64 GB บน Java 8
Peter Lawrey

3
ฉันเพิ่งเรียกใช้การทดสอบบางอย่างบน Win8 x64 i7-4702MQ JDK 8 u40 พร้อม 7 GB xms และ xmx จาก 7 GB, 5.4GB ถูกใช้โดยต้นไม้ใหญ่ที่โหลดจากฐานข้อมูล Access ประเด็นของฉันคือ: การระบุแฟล็ก -XX: + UseCompressedOops ด้วยตนเองทำให้ประสิทธิภาพลดลง 20% (เมื่อสร้างต้นไม้ใหญ่) และอีก 1 รายการ (จาก 3 เป็น 4) หยุด GC ชั่วคราว (ด้วย GC เริ่มต้น) คุณอาจใช้มันเพื่อลดประสิทธิภาพหรือเพิ่มการหยุด GC ชั่วคราว ไม่ว่าจะด้วยวิธีใดมันก็ช้าลง 20%
zmirc

1
แต่ละแอปพลิเคชันมีหน่วยความจำและโปรไฟล์การใช้งานของตัวเอง ในกรณีของเราแอปเดสก์ท็อปที่มาจาก 32 บิต jvm แฟล็ก + UseCompressedOops ช่วยประหยัดทั้งวันเนื่องจากยังคงใช้หน่วยความจำต่ำพอที่จะใช้กับเครื่อง 4gb เก่าของลูกค้าและเพิ่มประสิทธิภาพใน 30% เมื่อเทียบกับ 32 บิต jvm
Alex Byrth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.