Does Java compiler handle inline Strings efficiently? -
1।
स्थिर अंतिम स्ट्रिंग memFriendly = "कुशलतापूर्वक संग्रहित स्ट्रिंग"; Println (memFriendly);
2।
System.out.println ("कुशलतापूर्वक स्ट्रिंग संग्रहीत");
क्या जावा कंपाइलर इन दोनों (1 और 2) को उसी तरीके से इलाज करेगा?
एफवाईआई: कुशलता से मैं रनटाइम मेमोरी उपयोग के साथ ही कोड निष्पादन समय। जैसे 1 मामले में स्केक पर अधिक समय लग सकता है जो चर के नाम से मेल खाता है?
सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {System.out.println ("हैलो वर्ल्ड!"); स्ट्रिंग होला = "होला, मुंडो!"; Println (hola); }
इस कोड के लिए disassembly के रूप में जोवप दिखाता है:
0: getstatic # 16; // फ़ील्ड जावा / लैंग / सिस्टम। आउट: लाजावा / io / प्रिंटस्ट्रीम; 3: एलडीसी # 22; // स्ट्रिंग हैलो दुनिया! 5: इनवॉवर्ज्यूलल # 24; // मेथड जावा / io / PrintStream.println: (Ljava / lang / String;) वी 8: एलडीसी # 30; // स्ट्रिंग होल, दुनिया! 10: खगोल 11: गस्टेटिक # 16; // फ़ील्ड जावा / लैंग / सिस्टम। आउट: लाजावा / io / प्रिंटस्ट्रीम; 14: अलॉडियस 15: इनवॉवर्जियल # 24; // मेथड जावा / io / PrintStream.println: (Ljava / lang / String;) वी 18: वापसी
ऐसा लगता है कि दूसरी स्ट्रिंग को संग्रहीत किया जा रहा है, जबकि पहले एक बस पारित किया गया है
अपडेट : यहां परिणाम दिए गए हैं I होला
को अंतिम
(परिणाम कोई aload_1
के रूप में घोषित नहीं किया जाता है, अगर मैं यह सही पढ़ रहा हूं तो इसका अर्थ है कि यह स्ट्रिंग दोनों को संग्रहीत और इनलाइन है, जैसा कि आप उम्मीद कर सकते हैं):
0: getstatic # 16; // फ़ील्ड जावा / लैंग / सिस्टम। आउट: लाजावा / io / प्रिंटस्ट्रीम; 3: एलडीसी # 22; // स्ट्रिंग हैलो दुनिया! 5: इनवॉवर्ज्यूलल # 24; // मेथड जावा / io / PrintStream.println: (Ljava / lang / String;) वी 8: एलडीसी # 30; // स्ट्रिंग होल, दुनिया! 10: खगोल 11: गस्टेटिक # 16; // फ़ील्ड जावा / लैंग / सिस्टम। आउट: लाजावा / io / प्रिंटस्ट्रीम; 14: एलडीसी # 30; // स्ट्रिंग होल, दुनिया! 16: इनवॉवर्जुअल # 24; // विधि जावा / io / PrintStream.println: (Ljava / lang / string;) वी 19: वापसी
Comments
Post a Comment