में सभी संभावित मूल्य os.arch मुझे लिनक्स, सोलारिस और विंडोज पर जेआरई 1.6 में os.arch संपत्ति के सभी संभावित मूल्यों के नवीनतम संकलन की आवश्यकता है। यदि संभव हो तो कृपया अपने निष्कर्षों के स्रोत को उद्धृत करें। मुझे अपनी जेएनएलपी फ़ाइल में संसाधनों का चयन करने के लिए इन मानों की आवश्यकता है। मूल रूप से मुझे जेडई 32 बिट या 64 बिट के आधार पर अलग-अलग जेवीएम मेमोरी असाइन करने की आवश्यकता है। आपके उत्तर की प्रतीक्षा कर रहा है। धन्यवाद32 बिट जेआरई में और 64 बिट जेआर
उत्तर
आप ओएस और इसकी आर्की को खोजने के लिए नीचे कुछ कोड भी लिख सकते हैं।
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.SystemUtils;
public class PlatformDetection {
private String os;
private String arch;
public static String OS_WINDOWS = "windows";
public static String OS_OSX = "osx";
public static String OS_SOLARIS = "solaris";
public static String OS_LINUX = "linux";
public static String ARCH_PPC = "ppc";
public static String ARCH_X86_32 = "x86_32";
public static String ARCH_X86_64 = "x86_64";
public PlatformDetection() {
// resolve OS
if (SystemUtils.IS_OS_WINDOWS) {
this.os = OS_WINDOWS;
} else if (SystemUtils.IS_OS_MAC_OSX) {
this.os = OS_OSX;
} else if (SystemUtils.IS_OS_SOLARIS) {
this.os = OS_SOLARIS;
} else if (SystemUtils.IS_OS_LINUX) {
this.os = OS_LINUX;
} else {
throw new IllegalArgumentException("Unknown operating system " + SystemUtils.OS_NAME);
}
// resolve architecture
Map<String, String> archMap = new HashMap<String, String>();
archMap.put("x86", ARCH_X86_32);
archMap.put("i386", ARCH_X86_32);
archMap.put("i486", ARCH_X86_32);
archMap.put("i586", ARCH_X86_32);
archMap.put("i686", ARCH_X86_32);
archMap.put("x86_64", ARCH_X86_64);
archMap.put("amd64", ARCH_X86_64);
archMap.put("powerpc", ARCH_PPC);
this.arch = archMap.get(SystemUtils.OS_ARCH);
if (this.arch == null) {
throw new IllegalArgumentException("Unknown architecture " + SystemUtils.OS_ARCH);
}
}
public String getOs() {
return os;
}
public String getArch() {
return arch;
}
public void setArch(String arch) {
this.arch = arch;
}
public void setOs(String os) {
this.os = os;
}
public String toString() {
return os + "_" + arch;
}
}
नीचे देखें लिंक
सबसे अच्छी जगह जहां आप इसे खुद JDK में है इस के लिए देख सकते हैं।
java.lang.System
पर देख रहे हैं आप देख सकते हैं कि गुण initProperties
विधि है जो मूल कोड पर निर्भर करता है JNI
का उपयोग कर का उपयोग कर initializeSystemClass
विधि में प्रारंभ किया गया है:
private static native Properties initProperties(Properties props);
/**
* Initialize the system class. Called after thread initialization.
*/
private static void initializeSystemClass() {
// VM might invoke JNU_NewStringPlatform() to set those encoding
// sensitive properties (user.home, user.name, boot.class.path, etc.)
// during "props" initialization, in which it may need access, via
// System.getProperty(), to the related system encoding property that
// have been initialized (put into "props") at early stage of the
// initialization. So make sure the "props" is available at the
// very beginning of the initialization and all system properties to
// be put into it directly.
props = new Properties();
initProperties(props); // initialized by the VM
...
...
}
आप के लिए initProperties
से कहा जाता है इस मूल कोड के स्रोत की जांच विभिन्न प्लेटफ़ॉर्म आप os.arch
सिस्टम प्रॉपर्टी के संभावित मान देख सकते हैं। तो इसे चरणबद्ध करें:
विधि से बुलाए गए JNI
विधि को देखने के लिए पहले देखें। System.c
JNIEXPORT jobject JNICALL
Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props)
{
char buf[128];
java_props_t *sprops = GetJavaProperties(env);
jmethodID putID = (*env)->GetMethodID(env,
(*env)->GetObjectClass(env, props),
"put",
"(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
if (sprops == NULL || putID == NULL) return NULL;
PUTPROP(props, "java.specification.version",
JDK_MAJOR_VERSION "." JDK_MINOR_VERSION);
PUTPROP(props, "java.specification.name",
"Java Platform API Specification");
PUTPROP(props, "java.specification.vendor", "Sun Microsystems Inc.");
PUTPROP(props, "java.version", RELEASE);
PUTPROP(props, "java.vendor", VENDOR);
PUTPROP(props, "java.vendor.url", VENDOR_URL);
PUTPROP(props, "java.vendor.url.bug", VENDOR_URL_BUG);
...
/* os properties */
PUTPROP(props, "os.name", sprops->os_name);
PUTPROP(props, "os.version", sprops->os_version);
// HERE IS THE `os.arch` PROPERTY :)
PUTPROP(props, "os.arch", sprops->os_arch);
से तो आप देख सकते रूप os.arch
PUTPROP(props, "os.arch", sprops->os_arch);
से आता है और sprops
यह हासिल की है java_props_t *sprops = GetJavaProperties(env);
का उपयोग कर। तो देता है, GetJavaProperties(env)
को देखने के लिए इस विधि का यह रूप java_props.h
में परिभाषित किया गया है:
java_props_t *GetJavaProperties(JNIEnv *env);
और कार्यान्वयन लगता है कि ओएस पर निर्भर करता है।
तो आखिर में GetJavaProperties
के लिए एक विशिष्ट कार्यान्वयन की तलाश में; विंडोज़ में संभावित मूल्य जो इस संपत्ति को ले सकते हैं ia64
, amd64
, x86
, या unknown
हैं।आप java_props_md.c
file से देख सकते हैं:
#if _M_IA64
sprops.os_arch = "ia64";
#elif _M_AMD64
sprops.os_arch = "amd64";
#elif _X86_
sprops.os_arch = "x86";
#else
sprops.os_arch = "unknown";
#endif
सोलारिस के लिए और अधिक जटिल लगता है के बाद से मूल कोड में संपत्ति के मूल्य के रूप में सोलारिस के लिए java_props_md.c
विशिष्ट में परिभाषित मैक्रो से आता है:
sprops.os_arch = ARCHPROPNAME;
और यह मैक्रो यह है इस प्रकार Makefile
में परिभाषित:
OTHER_CPPFLAGS += -DARCHPROPNAME='"$(ARCHPROP)"'
तो यह लग रहा है जैसे पर्यावरण से आता है, जहां इसे संकलित किया जाता है (खेद है कि मैं सी विशेषज्ञ नहीं हूं, मैं बस अनुमान लगा रहा हूं हालांकि शायद मैं आपको थोड़ा सा मार्गदर्शन कर सकता हूं)।
src/linux/native/
में लिनक्स फ़ोल्डर में java_props_md.c
नहीं है इसलिए मुझे लगता है कि इस मामले में सौर स्रोत के रूप में एक ही स्रोत लें (मैं फिर से अनुमान लगा रहा हूं ...)।
नोट: मैं यह मान प्राप्त करने के लिए 1.6 संस्करण का उपयोग करता हूं, हालांकि नए संस्करणों को नए जावा संस्करणों में जोड़ा जा सकता है, इसलिए अपना आवश्यक संस्करण देखें।
उम्मीद है कि यह मदद करता है,
हालांकि यह एक पूर्ण समाधान नहीं है, लेकिन मैंने इसे बक्षीस दिया क्योंकि आपने वैधानिक मूल्यों को देखने का प्रयास किया था। नोट: ऐतिहासिक कारणों से, jdk9 से पहले जावा में सोलारिस फ़ोल्डर में सामान्य जेनिक्स यूनिक्स की अधिकांश चीज़ें होती हैं, इसलिए हाँ, वह कोड लिनक्स पर लागू होगा। यह दुर्भाग्यपूर्ण है कि मूल्य पर्यावरण से आता है क्योंकि इसका मतलब है कि इसका मूल्य * ओपन-एंड * है। मैं बहुत सारे आर्किटेक्चर समानार्थियों के अंधविश्वास को शामिल किए बिना संभावित मूल्यों की एक साफ, कैनोलिक तालिका की उम्मीद करता था, लेकिन शायद यह असंभव है। – Boann
@ बोआन सौर और लिनक्स के बारे में पुष्टि के लिए धन्यवाद। सबसे पहले मैं 'os.arch' के संभावित मान देखने के लिए प्रलेखन देख रहा हूं लेकिन ऐसा लगता है कि इसके बारे में कोई आधिकारिक जानकारी नहीं है ... तो फिर मैं सीधे कोड में देखता हूं; दुर्भाग्य से यह वह जानकारी भी नहीं देता है जिसे हम ढूंढ रहे हैं। वैसे भी बक्षीस के लिए धन्यवाद ':) '। – albciff
- 1. 32 बिट बनाम 64 बिट
- 2. 32 बिट और 64 बिट अप्रबंधित DLL
- 3. 32-बिट और 64-बिट पी/मिक्सिंग
- 4. 32 बिट और 64 बिट विंडोज़
- 5. जावा और ग्रहण - 32 बनाम 64 बिट
- 6. जावा जेआरई 64-बिट डाउनलोड?
- 7. 32-बिट या 64-बिट एप्लिकेशन?
- 8. 64-बिट जावा ऐप्स: क्या 64-बिट ओएस, 64-बिट जेआरई और 64-बिट एप्लिकेशन आवश्यक है?
- 9. 32 बिट int * 32 बिट int = 64 बिट int?
- 10. कि 32 और 64-बिट
- 11. 32-बनाम 64-बिट
- 12. जावा 32-बिट बनाम 64-बिट संगतता
- 13. 64 बिट या 32 बिट ओएस
- 14. , .net आवेदन 32 बिट 64 बिट
- 15. 32 बिट या 64 बिट एंड्रॉइड एसडीके?
- 16. क्यों 32 बिट ड्राइवर 64 बिट
- 17. 64 बिट वीसी ++ प्रोग्राम 32 बिट मोड
- 18. पाइथन 64 बिट या 32 बिट
- 19. 64-बिट डीएल का आकार 32-बिट
- 20. 64-बिट बनाम 32-बिट विंडोज
- 21. 32 बिट डीएल को 64 बिट डीएल
- 22. जेडीके 64 बिट या 32 बिट?
- 23. 32-बिट मेमोरी और 32-बिट प्रोसेसर
- 24. प्रदर्शन 32 बिट बनाम 64 बिट अंकगणित
- 25. एकल 32/64-बिट चालकों
- 26. ओपनसीएल: जीपीयू पर 32-बिट और 64-बिट पॉपकंट निर्देश?
- 27. 32 बिट मूल कोड, जेएनए और 64 बिट JVM
- 28. मिश्रित 32 बिट और 64 बिट साझा ऑब्जेक्ट/लाइब्रेरी
- 29. 64 बिट और 32 बिट प्रक्रिया ख़बर बढ़ावा :: message_queue
- 30. मिनजीडब्ल्यू जीसीसी - सिंगल 32-बिट और 64-बिट क्रॉस-कंपाइलर?
मैंने इस जवाब को बक्षीस नहीं दिया क्योंकि यह स्पष्ट नहीं है कि लिंक कितने विश्वसनीय हैं। वे कुछ आर्किटेक्चर (जैसे 'पावरपीसी' बनाम' पीपीसी') के लिए अलग-अलग 'os.arch' मानों का पता लगाते हैं), और यह स्पष्ट नहीं है कि वे जानते हैं कि मान हो सकते हैं या यदि यह अंधविश्वास कोडिंग है। इसके अलावा आप उनमें से एक को कॉपी-पेस्ट करते हैं और मुझे नहीं पता कि इसकी कॉपीराइट स्थिति क्या है। – Boann