हमारे पास एक जावा/जर्बी वेबपैम टॉमकैट के तहत चल रहा है, और मैं रनटाइम के दौरान ऐप द्वारा ऑब्जेक्ट्स और मेमोरी उपयोग की संख्या का विश्लेषण कर रहा हूं। स्टार्टअप के बाद मैंने देखा है कि कक्षा "org.jruby.RubyString" स्ट्रिंग के 1,118,000 उदाहरण थे, "अकेले खाली तारों द्वारा उपयोग की जाने वाली हीप मेमोरी की कुल मात्रा 65 एमबी है, यह मेरे लिए हास्यास्पद है क्योंकि यह स्मृति का 15% है वेबपैप द्वारा प्रयोग किया जाता है। रिक्त स्ट्रिंग इस समस्या के साथ कई स्ट्रिंग मानों का केवल एक उदाहरण है, यदि मैं उन सभी जर्बी स्ट्रिंग्स को प्रशिक्षित कर सकता हूं जो मैंने काम किया है तो मैं लगभग 130 एमबी बचा सकता हूं।क्या जर्बी रनटाइम इंटर्न सभी तारों को बनाने का कोई तरीका है?
मैं जावा में जानता हूं, हर बार जब एक स्ट्रिंग मान बनाया जाता है, तो यह जांच करेगा कि क्या स्ट्रिंग पूल में मान पहले से मौजूद है और यदि यह करता है तो इसका पुन: उपयोग करें। मुझे आश्चर्य है कि क्या जुरुबी में कोई विकल्प है जिसमें वही अनुकूलन है? यदि हां, तो मैं इसे कैसे सक्षम करूं? JRuby में
उदाहरण: जावा में
v1 = "a"
v2 = "a"
puts v1.object_id # => 3352
puts v2.object_id # => 3354
उदाहरण:
String v1 = "a";
String v2 = "a";
System.out.println(v1.hashCode()); # => 97
System.out.println(v2.hashCode()); # => 97
यदि आप सभी स्ट्रिंग्स को सिंबल के साथ प्रतिस्थापित करते हैं तो आपको वह व्यवहार मिल जाएगा, लेकिन मुझे इसे स्ट्रिंग स्वचालित रूप से इंटर्न करने के विकल्प के बारे में पता नहीं है। –
कोई आदर्श समाधान नहीं है क्योंकि इन तारों में से बहुत से तृतीय पक्ष रत्न और प्लगइन से बनाए जाते हैं। –
क्या आप कोड के उन टुकड़ों में से एक प्रकाशित कर सकते हैं जो इन खाली तारों का उत्पादन करते हैं? – peter