בדוק אם תוכנית Java פועלת ב- JVM של 64 סיביות או 32 סיביות

1. סקירה כללית

למרות שג'אווה אינה תלויה בפלטפורמה, ישנם מקרים בהם עלינו להשתמש בספריות מקומיות. במקרים אלה, נצטרך לזהות את הפלטפורמה הבסיסית ולהעמיס את הספריות המקוריות המתאימות בעת ההפעלה.

במדריך זה נלמד דרכים שונות לבדוק אם תוכנית Java פועלת ב- JVM של 64 סיביות או 32 סיביות.

ראשית, נראה כיצד להשיג זאת באמצעות מערכת מעמד.

לאחר מכן, נראה כיצד להשתמש בממשק ה- API של Java Native Access (JNA) כדי לבדוק את המרות של ה- JVM. JNA היא ספרייה שפותחה בקהילה המאפשרת גישה לכל ילידים.

2. באמצעות sun.arch.data.model נכס מערכת

ה מערכת בכיתה ב- Java מספק גישה למאפיינים מוגדרים חיצוניים ולמשתני סביבה. זה שומר על א נכסים אובייקט המתאר את התצורה של סביבת העבודה הנוכחית.

אנחנו יכולים להשתמש ב"sun.arch.data.model”מאפיין מערכת לזיהוי קצב JVM:

System.getProperty ("sun.arch.data.model"); 

הוא מכיל "32" או "64" כדי לציין JVM של 32 סיביות או 64 סיביות, בהתאמה. גישה זו אמנם קלה לשימוש, אך היא מחזירה "לא ידוע" אם הנכס אינו קיים. לפיכך, זה יעבוד רק עם גרסאות Java של אורקל.

בואו נראה את הקוד:

מחלקה ציבורית JVMBitVersion {public String getUsingSystemClass () {return System.getProperty ("sun.arch.data.model") + "-ביט"; } // ... שיטות אחרות} 

בואו נבדוק גישה זו באמצעות מבחן יחידה:

@ מבחן ציבורי בטל כאשר משתמש SystemClass_thenOutputIsAsExpected () {if ("64" .equals (System.getProperty ("sun.arch.data.model"))) {assertEquals ("64-bit", jvmVersion.getUsingSystemClass ()); } אחר אם ("32" .equals (System.getProperty ("sun.arch.data.model"))) {assertEquals ("32-bit", jvmVersion.getUsingSystemClass ()); }}

3. שימוש ב- JNA API

JNA (Java Native Access) תומך בפלטפורמות שונות כגון MacOS, Microsoft Windows, Solaris, GNU ו- Linux.

הוא משתמש בפונקציות מקוריות כדי לטעון ספרייה לפי שם ולאחזר מצביע לפונקציה בתוך אותה ספרייה.

3.1. יָלִיד מעמד

אנחנו יכולים להשתמש POINTER_SIZE מ ה יָלִיד מעמד. קבוע זה מציין את הגודל (בבייטים) של מצביע מקורי בפלטפורמה הנוכחית.

ערך 4 מציין מצביע מקורי של 32 סיביות, ואילו ערך 8 מצביע על מצביע מקורי של 64 סיביות:

אם (com.sun.jna.Native.POINTER_SIZE == 4) {// 32 סיביות} אחרת אם (com.sun.jna.Native.POINTER_SIZE == 8) {// 64 סיביות}

3.2. פּלַטפוֹרמָה מעמד

לחלופין, אנו יכולים להשתמש ב- פּלַטפוֹרמָה class, המספק מידע פלטפורמה פשוט.

זה מכיל ה is64Bit () שיטה שמזהה אם ה- JVM הוא 64 סיביות או לא.

בואו לראות איך זה מזהה את המרות:

ציבורי סטטי ציבורי בוליאני is64Bit () {מודל מחרוזת = System.getProperty ("sun.arch.data.model", System.getProperty ("com.ibm.vm.bitmode")); if (model! = null) {return "64" .equals (model); } אם ("x86-64". שווה (ARCH) || "ia64". שווה (ARCH) || "ppc64". שווה (ARCH) || "ppc64le". שווה (ARCH) || "sparcv9". שווה (ARCH) || "mips64" .equals (ARCH) || "mips64el" .equals (ARCH) || "amd64" .equals (ARCH) || "aarch64" .equals (ARCH)) {return true; } להחזיר את Native.POINTER_SIZE == 8; }

הנה ה קֶשֶׁת קבוע נגזר מה- "os.archרכוש דרך מערכת מעמד. הוא משמש לקבלת ארכיטקטורת מערכות הפעלה:

ARCH = getCanonicalArchitecture (System.getProperty ("os.arch"), osType);

גישה זו עובדת עבור מערכות הפעלה שונות וגם עם ספקי JDK שונים. לפיכך, הוא אמין יותר מה- "sun.arch.data.model”נכס מערכת.

4. מסקנה

במדריך זה למדנו כיצד לבדוק את גרסת הסיביות של JVM. ראינו גם כיצד JNA פשטה עבורנו את הפתרון בפלטפורמות שונות.

כמו תמיד, הקוד השלם זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found