UseCompressedOops JVM ध्वज क्या करता है और मुझे इसका उपयोग कब करना चाहिए?


85

हॉटस्पॉट JVM ध्वज क्या करता -XX:+UseCompressedOopsहै और मुझे इसका उपयोग कब करना चाहिए? 64-बिट जावा उदाहरण (इसका उपयोग नहीं कर रहा है) पर इसका उपयोग करते समय मैं किस प्रकार का प्रदर्शन और मेमोरी-उपयोग अंतर देखूंगा?


1
यह 64-बिट पॉइंटर्स को कंप्रेस करता है। आपको बढ़ी हुई पॉइंटर साइज़ से कम मेमोरी ब्लोट, जीसी में बिताए कम समय, प्रदर्शन में शायद एक छोटा डिप दिखाई देगा। jdk1.6.0_22 अंतिम सन JVM था जो इस ध्वज को डिफ़ॉल्ट रूप से बंद कर दिया था।
sjr

जवाबों:


86

पिछले वर्ष के अधिकांश हॉटस्पॉट JVM ने इसे डिफ़ॉल्ट रूप से लिया है। यह विकल्प 64-बिट जेवीएम में 32-बिट और 32 जीबी के ढेर के करीब पहुंच का संदर्भ देता है। (32-बिट से अधिक पॉइंटर्स कर सकते हैं) (आप असीमित ऑफ हीप मेमोरी के पास भी हो सकते हैं)। यह स्मृति की एक महत्वपूर्ण राशि को बचा सकता है और संभावित रूप से प्रदर्शन में सुधार कर सकता है।

यदि आप इस विकल्प का उपयोग करना चाहते हैं, तो मैं आपको एक ऐसे संस्करण के लिए अपडेट करने का सुझाव देता हूं, जिस पर यह डिफ़ॉल्ट रूप से है क्योंकि हो सकता है कि कोई अच्छा कारण हो, जैसे बग, क्यों यह पहले सक्षम नहीं था। जावा 6 अपडेट 23 या जावा 7 अपडेट 5 का प्रयास करें।

संक्षेप में, इसे चालू न करें, एक ऐसे संस्करण का उपयोग करें जिसके पास डिफ़ॉल्ट रूप से है।


अपडेट करें:

जावा 8 में आपके पास सेट करने का विकल्प है -XX:ObjectAlignmentInBytes=और वास्तव में यदि आप आकार को 64 जीबी तक बढ़ाते हैं तो यह -XX:ObjectAlignmentInBytes=1632-बिट संदर्भ का उपयोग करेगा और फिर भी उपयोग करेगा ।


मैंने यह लेख पढ़ा: community.oracle.com/message/10019916, जिसमें कहा गया है कि हमें इस ध्वज को मैन्युअल रूप से उपयोग करना चाहिए, भले ही यह डिफ़ॉल्ट रूप से सक्षम हो। कोई विचार?
वनावल

1
यदि आप JE cache इसका उपयोग कर रहे हैं तो @vanval की सिफारिश की जाती है क्योंकि यह काम नहीं कर सकता है कि आप किसी कारण से संपीड़ित का उपयोग कर रहे हैं या नहीं। मैं कुछ तरीकों के बारे में सोच सकता हूं जो आपको यह btw बता सकते हैं। आपको कमांड लाइन IMHO पर इसे निर्दिष्ट करने की आवश्यकता नहीं है जब तक कि आप जेवीएम को विफल नहीं करना चाहते हैं यदि यह सक्षम नहीं है। उदाहरण के लिए, आपके पास जावा 8.
पीटर लॉरी

3
मैं सिर्फ 7 जीबी xms और xmx के साथ Win8 x64 i7-4702MQ JDK 8 u40 पर कुछ परीक्षण चला रहा हूं, 7 जीबी में, 5.4 जीबी का उपयोग एक्सेस डीबी से लोड एक बड़े पेड़ द्वारा किया जाता है। मेरा कहना है: मैन्युअल रूप से -XX निर्दिष्ट करना: + UseCompressedOops ध्वज प्रदर्शन में 20% की कमी (बड़ा पेड़ पैदा करते समय) और 1 अधिक (3 से 4 तक) लंबे जीसी ठहराव (डिफ़ॉल्ट जीसी के साथ) की ओर जाता है। आप इसे प्रदर्शन में कमी के रूप में या जीसी ठहराव में वृद्धि के रूप में लेते हैं। किसी भी तरह से, यह 20% धीमा था।
zmirc

1
प्रत्येक एप्लिकेशन की अपनी मेमोरी और उपयोग प्रोफ़ाइल होती है। हमारे मामले में, 32 बिट्स jvm से आने वाला एक डेस्कटॉप ऐप, + UseCompressedOops फ्लैग दिन को बचाता है, क्योंकि यह मेमोरी उपयोग को ग्राहक की पुरानी 4 जीबी मशीन पर फिट होने के लिए पर्याप्त कम रखता है और 32% jvm की तुलना में 30% तक बढ़ जाता है।
एलेक्स बर्थ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.