2009-06-26 15 views
18

मैं हाल ही में सभी JVM JRE 6 [Java VM Options] में उपलब्ध तर्कों के बारे में पढ़ रहे हैं और यह देखा गया था:JVM -XX: + स्ट्रिंग कैश तर्क?

-XX: + StringCache: आमतौर पर आवंटित तार की कैशिंग सक्षम बनाता है।

अब मैं धारणा है कि जावा प्रशिक्षु का एक पूल रखा के नीचे हमेशा था (सही शब्द?) तार और जब शाब्दिक साथ स्ट्रिंग संयोजन की तरह कुछ कर रही है कि यह नई वस्तुओं बनाने नहीं किया गया था, लेकिन उन्हें इस पूल से खींच रहा है। क्या किसी ने कभी भी इस तर्क का उपयोग किया है, या समझा सकता है कि इसकी आवश्यकता क्यों होगी?

संपादित करें: मैंने यह बेंचमार्क चलाने का प्रयास किया, यह देखने के लिए कि क्या इस तर्क का कोई प्रभाव पड़ा है और इसे पहचानने के लिए सूर्य जेवीएम प्राप्त करने में असमर्थ था। यह था:

java version "1.6.0_11" 
Java(TM) SE Runtime Environment (build 1.6.0_11-b03) 
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, 
sharing) 

तो मुझे यकीन नहीं है कि यह तर्क बिल्कुल काम करता है या नहीं।

+2

मुझे लगता है कि सबसे स्ट्रिंग आपरेशन होना शामिल प्रयोग नहीं करते। इंटर्निंग का उपयोग कक्षा फ़ाइलों से स्ट्रिंग मानों को स्टोर करने के लिए JVM द्वारा किया जाता है और डुप्लिकेट की वजह से अत्यधिक मेमोरी खपत से बचने के लिए किया जाता है। – akarnokd

+0

महान सवाल। सूरज डॉक्स यहां बहुत अस्पष्ट हैं। हालांकि, इंटर्निंग पर दस्तावेज़ स्पष्ट हैं कि यह केवल विशिष्ट परिस्थितियों (स्ट्रिंग अक्षर) के तहत संचालित होता है, इसलिए शायद जेवीएम तर्क इस व्यवहार को व्यापक परिस्थितियों में लागू करता है। –

+0

मुझे ओपनजेडीके स्रोत में यह विकल्प नहीं मिल रहा है। आपको क्या लगता है इसका मतलब है? –

उत्तर

0

मैं एक ऐसा जेवीएम नहीं ढूंढ पाया जो इस तर्क को स्वीकार करता है - इसलिए मुझे लगता है कि कहने के लिए और कुछ नहीं है।

+0

ओरेकल जेरोकेट 6;) http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionXX.html –

+3

आपको -XX: + आक्रामक प्रयासों को कई अजीब विकल्पों को सक्षम करने के लिए, -XX : + UseStringCache सहित। यहां रेफरी है: http://mail.openjdk.java.net/pipermail/jdk7-dev/2011-April/002024.html – bestsss

6

मेरा मानना ​​है कि यह एक ही String वस्तुओं में सक्षम बनाता है जब -XX:+AggressiveOpts के साथ प्रयोग किया है जब एक ही पाठ के साथ String बनाने (हालांकि new String के माध्यम से नहीं, निश्चित रूप से) वापस कर दी है। एक प्रोफ़ाइल चरण है जहां एक कैश बनता है, और एक बिंदु के बाद कैश को केवल पढ़ने के लिए स्विच किया जाता है। यह कुछ मानक में उच्च स्कोर प्राप्त करता है।

1

मैं भी ऊपर काम नहीं कर सका, लेकिन नवीनतम जेबीबी @ spec.org इसका उपयोग दिखाता है: -XX: -UseStringCache। मुझे यह देखने के लिए बेंचमार्क फिर से चलाने होंगे कि क्या इससे कोई फर्क पड़ता है (एक एक्सएमएल भारी ऐप)।

1

मैं भी एक JVM खोजने में सक्षम नहीं हूं जो इस सेटिंग का सम्मान करता है; जैसा कि गुणवत्ता पर टिप्पणी की गई और जेवीएम पैरामीटर के आसपास दस्तावेज़ीकरण की उपयोगीता भयानक है, और फिर भी किसी कारण से ऐसा क्षेत्र प्रतीत होता है जहां जेवीएम विक्रेता प्रतियोगी भेदभाव के लिए जगह देखते हैं - हालांकि उचित ओरेकल/सूर्य होना सबसे खराब है।

किसी भी तरह यदि आपको लगता है कि किसी विशेष क्षेत्र में आपका ऐप बार-बार स्ट्रिंग मानों की एक छोटी संख्या का उपयोग करता है तो इंटर्न-पूल मान वापस करने के लिए String.intern() विधि का उपयोग करके इंटर्निंग का उपयोग करना निश्चित रूप से समझदार है। ध्यान दें कि आपको रिटर्न वैल्यू का उपयोग करना है, यह मूल मूल्य पर साइड इफेक्ट नहीं है।

सभी प्रोफाइलिंग/प्रदर्शन tweaks के साथ मेट्रिक्स और परीक्षण के साथ सावधानी से किया जाना चाहिए। यह महत्वपूर्ण हो सकता है (मेरे लिए रहा है) लेकिन यदि मूल्यों का पूल छोटा नहीं है तो यह प्रदर्शन को कम करता है और आपको यह पता होना चाहिए कि स्ट्रिंग मानों का पूल पर्म जनरल में आयोजित किया जाता है और इसलिए इसका उपयोग स्मृति उपयोग को प्रभावित करेगा, जीसी आदि

3

-XX: -UseStringCache मेरे लिए काम करता है, अजीब तरह से।

मेरी JDK संस्करण 1.6.0_22

1

JDK 8.0 के रूप में, इस विकल्प को हटा दिया गया है होना चाहिए। यह मेरे लिए अस्पष्ट है कि, यदि कुछ भी हो, तो प्रतिस्थापन के रूप में उपयोग किया जा सकता है।

http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

-XX:+UseStringCache 

    Enables caching of commonly allocated strings. This option was removed from JDK 8 
    with no replacement. 
संबंधित मुद्दे