java मैं कैसे बता सकता हूं कि मैं 64-बिट JVM या 32-बिट JVM(किसी प्रोग्राम के भीतर से) में चल रहा हूं या नहीं?




jni 64bit (8)

मैं कैसे बता सकता हूं कि मेरा एप्लिकेशन जेवीएम 32 बिट या 64-बिट है? विशेष रूप से, प्रोग्राम के भीतर इसका पता लगाने के लिए मैं किस कार्य या प्राथमिकता का उपयोग करता हूं?


पूरक जानकारी:

एक चल रही प्रक्रिया पर आप (कुछ कम से कम सूर्य जेडीके 5/6 संस्करणों के साथ) उपयोग कर सकते हैं:

$ /opt/java1.5/bin/jinfo -sysprops 14680 | grep sun.arch.data.model
Attaching to process ID 14680, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 1.5.0_16-b02
sun.arch.data.model = 32

जहां 14680 आवेदन चलाने वाले जेवीएम का पीआईडी ​​है। "os.arch" भी काम करता है।

इसके अलावा अन्य परिदृश्य समर्थित हैं:

jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [[email protected]]remote-hostname-or-IP 

हालांकि इस नोट पर भी विचार करें:

" NOTE - यह उपयोगिता असमर्थित है और जेडीके के भविष्य के संस्करणों में उपलब्ध हो सकती है या नहीं भी हो सकती है। विंडोज सिस्टम में जहां dbgent.dll मौजूद नहीं है, 'इन उपकरणों को काम करने के लिए' विंडोज़ के लिए डिबगिंग टूल्स 'को स्थापित करने की आवश्यकता है। पाथ पर्यावरण परिवर्तक में लक्ष्य प्रक्रिया या क्रैश डंप फ़ाइल का निर्माण किया गया स्थान से उपयोग किए गए jvm.dll का स्थान होना चाहिए। "


आप कमांड लाइन पर आज़मा सकते हैं:

java -d64 -version

यदि यह 64-बिट संस्करण नहीं है, तो आपको एक ऐसा संदेश मिलेगा जो इस तरह दिखता है:

यह जावा इंस्टेंस 64-बिट JVM का समर्थन नहीं करता है। कृपया वांछित संस्करण स्थापित करें।

अधिक जानकारी java -help लिए JVM के सहायता विकल्पों से परामर्श लें


फिर से अपडेट करें :

मैंने 32-बिट जेवीएम स्थापित किया और इसे दोबारा पुनः प्रयास किया, ऐसा लगता है कि निम्नलिखित आपको JVM Bitness बताता है, ओएस आर्क नहीं:

System.getProperty("os.arch");
#
# on a 64-bit Linux box:
# "x86" when using 32-bit JVM
# "xmd64" when using 64-bit JVM

यह सूर्य और आईबीएम जेवीएम (32 और 64-बिट) दोनों के खिलाफ परीक्षण किया गया था। जाहिर है, सिस्टम प्रॉपर्टी सिर्फ ऑपरेटिंग सिस्टम आर्क नहीं है।


बस अपने कंसोल में java -version टाइप करें।

यदि 64 बिट संस्करण चल रहा है, तो आपको एक संदेश मिलेगा जैसे:

java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)

एक 32 बिट संस्करण कुछ इसी तरह दिखाएगा:

java version "1.6.0_41"
Java(TM) SE Runtime Environment (build 1.6.0_41-b02)
Java HotSpot(TM) Client VM (build 20.14-b01, mixed mode, sharing)

तीसरे पंक्ति में 64-Bit Server बजाय Client नोट करें। Client/Server भाग अप्रासंगिक है, यह 64-Bit की अनुपस्थिति है जो मायने रखता है।

यदि आपके सिस्टम पर एकाधिक जावा संस्करण स्थापित हैं, तो जावा संस्करण के / bin फ़ोल्डर पर नेविगेट करें जिसे आप जांचना चाहते हैं, और वहां java -version टाइप करें।


वर्तमान में कार्यक्रम चला रहे JVM का संस्करण प्राप्त करने के लिए

System.out.println(Runtime.class.getPackage().getImplementationVersion());

यदि आप जेएनए का उपयोग कर रहे हैं, तो आप यह जांच सकते हैं कि com.sun.jna.Native.POINTER_SIZE == 4 (32 बिट) या com.sun.jna.Native.POINTER_SIZE == 8 (64 बिट) है या नहीं।


लिनक्स पर, आप निम्न दो आदेशों में से किसी एक का उपयोग करके ईएलएफ शीर्षलेख जानकारी प्राप्त कर सकते हैं:

file {YOUR_JRE_LOCATION_HERE}/bin/java

ओ / पी: ईएनएफ 64-बिट एलएसबी निष्पादन योग्य , एएमडी x86-64, संस्करण 1 (एसवाईएसवी), जीएनयू / लिनक्स 2.4.0 के लिए, गतिशील रूप से लिंक (साझा libs का उपयोग करता है), जीएनयू / लिनक्स 2.4.0 के लिए, छीन नहीं

या

readelf -h {YOUR_JRE_LOCATION_HERE}/bin/java | grep 'Class'

ओ / पी: कक्षा: ईएलएफ 64


" प्रोग्राम्स | प्रोग्राम्स एंड फीचर्स " के तहत " कंट्रोल पैनल " में विंडोज 7 के तहत जेआरई और जेडीके के 64-बिट वेरिएंट को " 64-बिट " कोष्ठक में सूचीबद्ध किया गया है (उदाहरण के लिए " जावा एसई डेवलपमेंट किट 7 अपडेट 65 (64-बिट ) "), जबकि 32-बिट वेरिएंट के लिए संस्करण का उल्लेख ब्रांड्स में नहीं किया गया है (उदाहरण के लिए सिर्फ" जावा एसई डेवलपमेंट किट 8 अपडेट 60 ")।







32-bit