2010-08-10 7 views
5

कुछ प्रश्न :):64 बिट के लिए जावा प्रोग्रामिंग JVM

यह पहचानने के लिए कि वर्तमान में JVM क्या स्थापित है? (64 बिट/32 बिट)

क्या मुझे 64 बिट JVM लक्ष्य प्लेटफ़ॉर्म के लिए प्रोग्रामिंग करते समय कुछ विचार करने की आवश्यकता है?

क्या मेरा जावा कोड 32 बिट के साथ-साथ 64 बिट जेवीएम पर भी काम कर सकता है?

64 बिट जेवीएम पर अपना जावा ऐप कैसे चलाएं?

मेरी जावा ऐप के लिए जेवीएम का उपयोग करने के तरीके की पहचान कैसे करें?

+1

* वर्चुअल * मशीन का पूरा बिंदु नहीं है जिस पर आर्किटेक्चर पर लागू किया गया है इससे कोई फर्क नहीं पड़ता? – Ken

+2

यदि आपको चलाने में सक्षम होने के लिए SWT-पुस्तकालयों की आवश्यकता नहीं है। –

उत्तर

10

आम तौर पर 64 बिट जेवीएम स्वयं को इस तरह पहचान लेगा।

32/64 बिट बातें मैंने देखा है:

  1. पता स्थान - अगर आप अधिक है कि स्मृति की 1.3GB तो आप नहीं एक फर्क
  2. देशी पुस्तकालयों देखेंगे संबोधित करने के लिए उम्मीद नहीं कर रहे हैं - यदि आप किसी भी जेएनआई libs लोड कर रहे हैं, तो उन्हें आपके वीएम आर्किटेक्चर से मेल खाना पड़ेगा। उदाहरण के लिए, 64-बिट वीएम (बिना -32 प्रकार के झंडे के) 32-बिट देशी पुस्तकालयों को लोड करने का प्रयास न करें

हां, वही कोड दोनों JVMs पर चलेंगे।

सिस्टम प्रॉपर्टी "sun.arch.data.model" में 32/64 झंडा है जो मुझे लगता है।

यहाँ कुछ उपयोगी जानकारी है: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html

+1

ध्यान रखें कि sun.arch.data.model गैर-मानक है, इसलिए गैर-सूर्य JVM कार्यान्वयन उस सिस्टम प्रॉपर्टी को प्रदान नहीं कर सकता है। सिस्टम प्रॉपर्टी os.arch एक मानक सिस्टम प्रॉपर्टी है, लेकिन आपको इसे पार्स करना पड़ सकता है। यह देखने के लिए जांच कर रहा है कि os.arch में वर्ण '64' हैं या नहीं। –

+0

@jowierun "आम तौर पर एक 64 बिट जेवीएम खुद को इस तरह पहचान लेगा।" लेकिन जब मैं सोलारिस पर चलाता हूं (जहां 32 बिट के साथ-साथ 64 वीएम स्थापित होते हैं) यह हमेशा 32 बिट वीएम लेता है। – YoK

+1

@ सेन रेली लेकिन 64 बिट स्पार्क मशीन पर मैं 32 बिट जेवीएम चला सकता हूं। तो मुझे नहीं लगता कि os.arch मदद करेगा। सोलारिस पर – YoK

4

अपने खुद के जावा कोड में, आप 32- या 64-बिट के लिए कुछ भी संबंध में विशेष करने की जरूरत नहीं है। उदाहरण के लिए सी और सी ++ के विपरीत, जावा में int हमेशा 32 बिट्स और long हमेशा 64 बिट्स (सी और सी ++ में, उन प्रकारों का आकार सिस्टम-निर्भर है) के विपरीत है।

जावा बाइटकोड के अलग-अलग 32-बिट और 64-बिट संस्करण नहीं हैं; बाइटकोड बिल्कुल वही है, इस तथ्य के बावजूद कि जिस JVM पर आप इसे चला रहे हैं वह 32-बिट या 64-बिट है। आपको 32-बिट या 64-बिट के लिए अपने जावा स्रोत को अलग-अलग संकलित करने की आवश्यकता नहीं है। कार्यक्षमता के संबंध में यह आपके जावा एप्लिकेशन के लिए कोई फर्क नहीं पड़ता अगर यह 32-बिट या 64-बिट JVM पर चलता है।

कुछ तकनीकी अंतर हो सकते हैं जो jowierun पहले से ही उल्लेख किया गया है। प्रदर्शन अंतर भी हो सकता है; उदाहरण के लिए विंडोज़ के लिए ओरेकल का 64-बिट जेवीएम 32-बिट जेवीएम से अलग है, यह अन्य जेआईटी अनुकूलन करता है। मैंने खुद को एक गणना-गहन आवेदन के साथ देखा जो मैंने हाल ही में लिखा था; 64-बिट जेवीएम पर यह 32-बिट जेवीएम की तुलना में बहुत तेज़ चलता है। (लेकिन यह केवल एक उदाहरण है, इसे सबूत के रूप में न लें कि कोई भी प्रोग्राम 64-बिट जेवीएम पर बहुत तेज चलता है)।

+1

64-बिट x86 JVM (और कई अन्य 64-बिट प्रोग्राम) कारणों में से एक कारण तेजी से चलता है क्योंकि इसमें http://www.oracle.com/technetwork/java/hotspotfaq-138619.html# के साथ काम करने के लिए अधिक पंजीकरण है। 64 बिट_परफॉर्मेंस –

1

आपके पास ये प्रश्न सामने हैं।

  1. आपको अपने जावा कोड में कुछ भी करने की ज़रूरत नहीं है, यह 32-लेकिन और 64-बिट दोनों पर चलती है।
  2. इसलिए आपको यह जानने की आवश्यकता नहीं है कि यह 64 बिट जेवीएम है या नहीं।
+6

@downvoter: कृपया समझाएं। अस्पष्ट डाउनवॉट्स किसी की भी मदद नहीं करते हैं: वे जनता को नहीं दिखाते कि उत्तर में क्या गलत है और वे पोस्टर की मदद नहीं करते हैं। – EJP

+0

मुझे लगता है कि ऐसा इसलिए है क्योंकि आपने केवल 20% प्रश्न का उत्तर दिया था। इसके अलावा, ** ** ** के बाद का हिस्सा आपके भाग – Pacerier

+0

@ पर्सियर पर एक धारणा है, यदि मैं कुछ अपूर्ण उत्तर के लिए कुछ गलत * वहां था, तो मैं डाउनवोट की अपेक्षा करता हूं। यह मेरे लिए अजीब लगता है। – EJP

2

यदि आप जावा मूल इंटरफ़ेस (जेएनआई) का उपयोग करके मूल कोड लिखने की योजना बना रहे हैं, तो आपको उचित सी कोड लिखने पर अतिरिक्त सावधान रहना होगा जो 64 और 32 बिट मशीनों पर चलेंगे। सुनिश्चित करें कि जावा कोड से/j तर्कों को पारित करते समय आप उचित जावा प्रकारों का उपयोग करते हैं (जेएनआई जावा प्रकारों के लिए टाइपपीफ का एक सेट प्रदान करता है), खासकर जब सरणी को परिवर्तित करते हैं। और अपने मूल कोड का परीक्षण करते समय, विभिन्न JVMs के साथ दोनों आर्किटेक्चर (-m32 जीएनयू जीसीसी पर 32 बिट आर्क को मजबूर करेगा) पर परीक्षण करें।