मैं कैसे बता सकता हूं कि जेवीएम जिसमें मेरा आवेदन 32 बिट या 64-बिट है? विशेष रूप से, कार्यक्रम के भीतर इसका पता लगाने के लिए मैं किन कार्यों या गुणों का उपयोग कर सकता हूं?
मैं कैसे बता सकता हूं कि जेवीएम जिसमें मेरा आवेदन 32 बिट या 64-बिट है? विशेष रूप से, कार्यक्रम के भीतर इसका पता लगाने के लिए मैं किन कार्यों या गुणों का उपयोग कर सकता हूं?
जवाबों:
आप उस सिस्टम प्रॉपर्टी को पुनः प्राप्त करते हैं जो इस JVM की बिटनेस को चिन्हित करता है:
System.getProperty("sun.arch.data.model");
संभावित परिणाम हैं:
"32"
- 32-बिट जेवीएम"64"
- 64-बिट जेवीएम"unknown"
- अज्ञात जेवीएमजैसा कि हॉटस्पॉट FAQ में वर्णित है :
जावा कोड लिखते समय, मैं 32 और 64-बिट ऑपरेशन के बीच अंतर कैसे कर सकता हूं?
कोई सार्वजनिक एपीआई नहीं है जो आपको 32 और 64-बिट ऑपरेशन के बीच अंतर करने की अनुमति देता है। 64-बिट को केवल एक बार लिखने के लिए एक और मंच के रूप में सोचें, कहीं भी परंपरा को चलाएं। हालाँकि, यदि आप कोड लिखना चाहते हैं जो कि प्लेटफ़ॉर्म विशिष्ट (आप पर शर्म की बात है), सिस्टम प्रॉपर्टी sun.arch.data.model का मान "32", "64", या "अज्ञात" है।
एक उदाहरण जहां यह आवश्यक हो सकता है यदि आपका जावा कोड देशी पुस्तकालयों पर निर्भर करता है, और आपको यह निर्धारित करने की आवश्यकता है कि स्टार्टअप पर पुस्तकालयों के 32- या 64-बिट संस्करण को लोड करना है या नहीं।
sun.*
आईबीएम JVM के साथ सिस्टम प्रॉपर्टी खोजने की उम्मीद नहीं करूंगा । दूसरे शब्दों में, यह पोर्टेबल नहीं है।
जावा के कुछ संस्करणों के लिए, आप झंडे के साथ कमांड लाइन से जेवीएम की बिटनेस की जांच कर सकते हैं -d32
और -d64
।
$ java -help
...
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
64-बिट JVM की जांच करने के लिए, दौड़ें:
$ java -d64 -version
यदि यह 64-बिट JVM नहीं है, तो आपको यह मिलेगा:
Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.
इसी तरह, 32-बिट JVM के लिए जाँच करें, चलाने के लिए:
$ java -d32 -version
यदि यह 32-बिट JVM नहीं है, तो आपको यह मिलेगा:
Error: This Java instance does not support a 32-bit JVM.
Please install the desired version.
ये ध्वज जावा 7 में जोड़े गए, जावा 9 में पदावनत , जावा 10 में हटाए गए, और अब जावा के आधुनिक संस्करणों पर उपलब्ध नहीं हैं।
java -d32 -version
सत्यापित करने के लिए चला सकते हैं कि आप 32-बिट नहीं चला रहे हैं। दोनों काम करना चाहते हैं Win7
।
java -d32 -version
भी और से भी मिलती हैjava -d64 -version
।
बस 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)
तीसरी पंक्ति के Client
बजाय ध्यान दें 64-Bit Server
। यह Client/Server
हिस्सा अप्रासंगिक है, यह 64-Bit
उस मामलों की अनुपस्थिति है।
यदि आपके सिस्टम पर एक से अधिक जावा संस्करण स्थापित हैं, तो आप जिस जावा संस्करण की जांच करना चाहते हैं, java -version
वहां / टाइप करें और वहां टाइप करें ।
मैंने 32-बिट JVM स्थापित किया और इसे फिर से प्राप्त किया, ऐसा लगता है कि निम्नलिखित आपको JVM बिटनेस बताता है, ओएस आर्क नहीं:
System.getProperty("os.arch");
#
# on a 64-bit Linux box:
# "x86" when using 32-bit JVM
# "amd64" when using 64-bit JVM
यह SUN और IBM JVM (32 और 64-बिट) दोनों के खिलाफ परीक्षण किया गया था। स्पष्ट रूप से, सिस्टम गुण केवल ऑपरेटिंग सिस्टम आर्च नहीं है।
os.arch
कई संभावित मूल्य हैं, यह बताना मुश्किल है कि क्या यह 32 या 64 बिट्स है। देखें lopica.sourceforge.net/os.html
पूरक जानकारी:
एक पर चलने वाली प्रक्रिया आप (कुछ हाल ही सूर्य JDK5 / 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 आवेदन चलाने वाले jv की PID है। "os.arch" भी काम करता है।
अन्य परिदृश्य भी समर्थित हैं:
jinfo [ option ] pid
jinfo [ option ] executable core
jinfo [ option ] [server-id@]remote-hostname-or-IP
हालाँकि इस नोट पर भी गौर करें:
" नोट - यह उपयोगिता असमर्थित है और JDK के भविष्य के संस्करणों में उपलब्ध हो सकती है या नहीं भी हो सकती है। विंडोज सिस्टम में जहां dbgent.dll मौजूद नहीं है, इन उपकरणों को काम करने के लिए 'डीबगिंग टूल फॉर विंडोज' को स्थापित करने की आवश्यकता है। PATH पर्यावरण चर में jvm.dll का स्थान लक्ष्य प्रक्रिया द्वारा उपयोग किया जाना चाहिए या उस स्थान से जिसमें क्रैश डंप फ़ाइल का उत्पादन किया गया था। "
लिनक्स पर, आप निम्नलिखित दो आदेशों में से किसी का उपयोग करके ईएलएफ हेडर की जानकारी प्राप्त कर सकते हैं:
file {YOUR_JRE_LOCATION_HERE}/bin/java
ओ / पी: जीएनयू / लिनक्स 2.4.0 के लिए ईएलएफ 64-बिट एलएसबी निष्पादन योग्य , एएमडी x86-64, संस्करण 1 (एसवाईएसवी), जीएनयू / लिनक्स 2.4.0 के लिए डायनामिकली लिंक (साझा लिबास का उपयोग करता है), छीन नहीं
या
readelf -h {YOUR_JRE_LOCATION_HERE}/bin/java | grep 'Class'
ओ / पी: क्लास: ईएलएफ 64
यदि आप JNA का उपयोग कर रहे हैं, तो आप जांच सकते हैं कि क्या com.sun.jna.Native.POINTER_SIZE == 4
(32 बिट) या com.sun.jna.Native.POINTER_SIZE == 8
(64 बिट)।
" प्रोग्राम्स | प्रोग्राम्स और फीचर्स " के तहत " कंट्रोल पैनल " में विंडोज 7 के तहत JRE & JDK के 64-बिट वेरिएंट को कोष्ठक में " 64-बिट " के साथ सूचीबद्ध किया गया है (उदाहरण के लिए " जावा एसई डेवलपमेंट किट 7 अपडेट 65 (64-बिट)" ) "), जबकि 32-बिट वेरिएंट के लिए वेरिएंट को कोष्ठक (उदाहरण के लिए" सिर्फ जावा एसई डेवलपमेंट किट 8 अपडेट 60 ") में वर्णित नहीं किया गया है ।
के लिए Windows
, आप Java
घर का स्थान देख सकते हैं । यदि यह होता है (x86)
तो यह 32-bit
अन्यथा है 64-bit
:
public static boolean is32Bit()
{
val javaHome = System.getProperty("java.home");
return javaHome.contains("(x86)");
}
public static boolean is64Bit()
{
return !is32Bit();
}
उदाहरण पथ:
C:\Program Files (x86)\Java\jdk1.8.0_181\bin\java.exe # 32-bit
C:\Program Files\Java\jdk-10.0.2\bin\java.exe # 64-bit
Windows
एकमात्र समाधान की परवाह क्यों ?यदि आपको यह जानने की आवश्यकता है कि आप किस बिट संस्करण पर चल रहे हैं, तो संभवतः आप देशी कोड के साथ आसपास फ़िदा हो रहे हैं, Windows
इसलिए प्लेटफ़ॉर्म-आज़ादी वैसे भी खिड़की से बाहर है।
जेवीएम का संस्करण प्राप्त करने के लिए वर्तमान में कार्यक्रम चल रहा है
System.out.println(Runtime.class.getPackage().getImplementationVersion());
1.8.0_172
या null
पर देता है Java 10
और वैसे भी सवाल का जवाब नहीं देता है।