मेरे पास एक Windows 7 x64 लैपटॉप है जिसमें Windows XP x32 अतिथि वर्चुअल मशीन VirtualBox का उपयोग करके स्थापित किया गया है। एक बार मैंने मेहमान पर एक ऐप चलाया और पाया कि यह मेजबान की तुलना में कहीं अधिक तेज़ी से चला। ऐसा क्यों होगा?
मेरे पास एक Windows 7 x64 लैपटॉप है जिसमें Windows XP x32 अतिथि वर्चुअल मशीन VirtualBox का उपयोग करके स्थापित किया गया है। एक बार मैंने मेहमान पर एक ऐप चलाया और पाया कि यह मेजबान की तुलना में कहीं अधिक तेज़ी से चला। ऐसा क्यों होगा?
जवाबों:
चूंकि आप जावा का उल्लेख करते हैं, आपके जेवीएम का संस्करण क्या है और क्या यह मेजबान पर 32-बिट या 64-बिट मोड में चल रहा है?
संकुचित उफ़
जावा हॉटस्पॉट पार्लेंस में एक "ऊप", या साधारण ऑब्जेक्ट पॉइंटर , एक ऑब्जेक्ट के लिए एक प्रबंधित पॉइंटर है। एक ओप आम तौर पर एक देशी मशीन पॉइंटर के समान आकार का होता है, जिसका अर्थ है एक LP64 सिस्टम पर 64 बिट्स। ILP32 सिस्टम पर, अधिकतम हीप आकार कुछ हद तक 4 गीगाबाइट से कम है, जो कई अनुप्रयोगों के लिए अपर्याप्त है। LP64 सिस्टम पर, दिए गए प्रोग्राम द्वारा उपयोग किए गए हीप को ILX32 सिस्टम पर चलाने पर लगभग 1.5 गुना बड़ा होना चाहिए। यह आवश्यकता प्रबंधित पॉइंटर्स के विस्तारित आकार के कारण है। मेमोरी सस्ती है, लेकिन इन दिनों बैंडविड्थ और कैश की आपूर्ति कम है, इसलिए ढेर के आकार में काफी वृद्धि हुई है और केवल 4 गीगाबाइट सीमा से अधिक प्राप्त करना अवांछनीय है।
जावा हीप में प्रबंधित पॉइंटर्स उन ऑब्जेक्ट्स की ओर इशारा करते हैं जो 8-बाइट एड्रेस सीमाओं पर संरेखित होते हैं। संपीड़ित ऊप्स 64-बिट जावा हीप आधार पते से 32-बिट ऑब्जेक्ट ऑफ़सेट के रूप में प्रबंधित पॉइंटर्स (जेवीएम सॉफ़्टवेयर में सभी लेकिन कई स्थानों पर नहीं) का प्रतिनिधित्व करते हैं। क्योंकि वे बाइट ऑफ़सेट्स के बजाय ऑब्जेक्ट ऑफ़सेट हैं, उनका उपयोग चार बिलियन ऑब्जेक्ट्स (बाइट्स नहीं), या लगभग 32 गीगाबाइट तक के ढेर के आकार को संबोधित करने के लिए किया जा सकता है । उनका उपयोग करने के लिए, उन्हें 8 के एक कारक द्वारा स्केल किया जाना चाहिए और जावा हीप आधार पते में जोड़ा जाना चाहिए जिस ऑब्जेक्ट को वे संदर्भित करते हैं। संकुचित आकार का उपयोग कर ऑब्जेक्ट आकार ILP32 मोड में उन लोगों के लिए तुलनीय है।
डिकोड शब्द का उपयोग ऑपरेशन को व्यक्त करने के लिए किया जाता है जिसके द्वारा 32-बिट संपीडित ऊप को 64-बिट देशी पते में प्रबंधित स्टेप में परिवर्तित किया जाता है। उलटा ऑपरेशन को एन्कोडिंग के रूप में संदर्भित किया जाता है ।
संपीडित ऑप्स जावा एसई 6u23 और बाद में डिफ़ॉल्ट रूप से समर्थित और सक्षम है। जावा एसई 7 में, संपीड़ित ऑप्स का उपयोग 64-बिट जेवीएम प्रक्रियाओं के लिए डिफ़ॉल्ट है जब
-Xmx
निर्दिष्ट नहीं है और-Xmx
32 गीगाबाइट से कम के मूल्यों के लिए है । 6u23 रिलीज से पहले JDK 6 के-XX:+UseCompressedOops
लिए, सुविधा को सक्षम करने के लिए java कमांड के साथ ध्वज का उपयोग करें ।
64-बिट JVM के बड़े मेमोरी फ़ुटप्रिंट में बहुत महत्वपूर्ण प्रदर्शन निहितार्थ हैं।
कैशिंग के कारण VM में अनुप्रयोग तेज़ हो सकते हैं। चूंकि वीएम फाइलों में अपने डिस्क को स्टोर करता है, होस्ट ऑपरेशन सिस्टम इस फाइलों को रैम में कैश कर सकता है और वे तेजी से ध्यान देने योग्य काम करेंगे। 32 बिट और 64 बिट अनुप्रयोगों के बीच वास्तविक विश्व अंतर कुछ प्रतिशत है।