2010-09-17 3 views
16

पर किसी ऑब्जेक्ट संदर्भ की मेमोरी आवश्यकताएं 32 बिट JVM (कम से कम हॉटस्पॉट पर) ऑब्जेक्ट का संदर्भ 4 बाइट्स लेता है।64 बिट JVM

क्या 64 बिट हॉटस्पॉट JVM को 8 बाइट की आवश्यकता है? या कुछ चतुर संपीड़न चल रहा है? यदि नहीं, तो प्रत्येक Object[] को दोगुनी ढेर मेमोरी की आवश्यकता होगी, जिसे मैं किसी भी तरह सोचता हूं (उम्मीद, उम्मीद) मामला नहीं है।

अद्यतन/अतिरिक्त प्रश्न: यह वास्तव में कोई फर्क है, या यह एक नगण्य वृद्धि हुई है, क्योंकि अधिकांश संदर्भ वस्तुओं है कि कुछ बाइट्स से भी ज्यादा बड़ा (जबकि एक तर्क कर सकता है कि उन वस्तुओं बारी में ज्यादातर शामिल हैं हैं को इंगित अन्य वस्तुओं के संदर्भों के)?

+1

आपको यह सहायक मिल सकता है - http://stackoverflow.com/questions/1443677/what-impact-if-any-does-the-d64-swtich-have-on-sun-jvm-resident-memory-usage –

+0

और यह एक: http://stackoverflow.com/questions/783662/java-32-bit-vs-64-bit-compatibility – Thilo

+1

बस डेटा बिंदु देने के लिए, जब हमने 32-बिट से 64- तक हमारे वेबएप को स्विच किया बिट जेवीएम, ढेर का उपयोग ~ 30% तक बढ़ गया। आपका माइलेज भिन्न हो सकता है, लेकिन कम से कम आपको एक बॉलपार्क देता है। – Cowan

उत्तर

15

64-बिट सिस्टम में, ऑब्जेक्ट संदर्भ आमतौर पर 8-बाइट लंबा होते हैं। लेकिन हाल ही में सूर्य/ओरेकल से जेवीएम में आप Compressed Oops सक्षम कर सकते हैं, जो ढेर आकार पर छोटी सीमा की लागत पर संदर्भ आकार को 4 बाइट्स तक कम कर देता है।

+0

मुझे लगता है कि यह जावा 7 या> जावा 6 यू 23 के लिए डिफ़ॉल्ट रूप से सक्षम है, है ना? –

+0

"संपीड़ित ओप्स जावा एसई 6u23 और बाद में रिलीज़ में डिफ़ॉल्ट रूप से समर्थित और सक्षम है।" देखें: [जावा एसई 6 अपडेट 23 रिलीज नोट्स] (http://www.oracle.com/technetwork/java/javase/6u23releasenotes-191058.html) – snorbi

+0

लेकिन: "जावा एसई 7 में, संपीड़ित ओप्स का उपयोग डिफ़ॉल्ट है 64-बिट जेवीएम प्रक्रियाओं के लिए जब -एक्सएमएक्स निर्दिष्ट नहीं है और 32 गीगाबाइट से कम एक्सएक्सएक्स के मानों के लिए। 6u23 रिलीज से पहले जेडीके 6 के लिए, सुविधा को सक्षम करने के लिए जावा कमांड के साथ -XX: + UseCompressedOops ध्वज का उपयोग करें। " Http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#compressedOop –

6

Java Platform Performance के अनुसार यह सख्ती से परिभाषित किया गया है नहीं है, लेकिन आम तौर पर एक 64-बिट सिस्टम पर 8 बाइट्स:

एक संदर्भ के आकार अच्छी तरह से परिभाषित नहीं है, लेकिन यह एक पर आम तौर पर 4 बाइट्स 64-बिट सिस्टम पर 32-बिट सिस्टम और 8 बाइट्स।

+0

तो हॉटस्पॉट इसे कैसे संभालता है? यदि प्रत्येक संदर्भ 8 बाइट्स है, तो इसका मतलब बहुत अधिक ढेर आवश्यकता होगी। – Thilo

+0

मुझे मारता है। इसके बारे में सोचा नहीं है। क्या यह नगण्य नहीं है, यद्यपि? आम तौर पर, प्रत्येक ऑब्जेक्ट स्टोर * कुछ * जो अधिकांश समय उन 8 बाइट्स से अधिक है। निश्चित रूप से, छोटी वस्तुओं के लिए मैं देख सकता हूं कि यह एक मुद्दा हो सकता है, लेकिन शायद ऐसे मामलों में एक आदिम के साथ बेहतर होगा। – aioobe

+0

पुस्तक में एक सेक्शन (उसी पृष्ठ पर) * ऑब्जेक्ट साइज मापना * वर्णन करता है कि ऑब्जेक्ट्स के आकार को कैसे मापें। शायद आप इसे आज़मा सकते हैं और रिपोर्ट कर सकते हैं। – aioobe