logo

ארכיטקטורת JVM (Java Virtual Machine).

  1. Java Virtual Machine
  2. אדריכלות פנימית של JVM

JVM (Java Virtual Machine) היא מכונה מופשטת. זהו מפרט המספק סביבת זמן ריצה שבה ניתן להפעיל קוד בייט של java.

JVMs זמינים עבור פלטפורמות חומרה ותוכנה רבות (כלומר, JVM תלוי בפלטפורמה).

מה זה JVM

זה:

  1. מפרט שבו מצוינת העבודה של Java Virtual Machine. אבל ספק היישום הוא עצמאי לבחור את האלגוריתם. היישום שלו סופק על ידי אורקל וחברות אחרות.
  2. יישום היישום שלו ידוע בשם JRE (Java Runtime Environment).
  3. מופע זמן ריצה בכל פעם שאתה כותב פקודת java בשורת הפקודה כדי להפעיל את מחלקת java, נוצר מופע של JVM.

מה שזה עושה

ה-JVM מבצע את הפעולה הבאה:

  • טוען קוד
  • מאמת קוד
  • מבצע קוד
  • מספק סביבת זמן ריצה

JVM מספק הגדרות עבור:

  • אזור זיכרון
  • פורמט קובץ כיתה
  • סט רישום
  • ערימת אשפה שנאספה
  • דיווח שגיאה חמור וכו'.

ארכיטקטורת JVM

בואו נבין את הארכיטקטורה הפנימית של JVM. הוא מכיל מטען כיתות, אזור זיכרון, מנוע ביצוע וכו'.

ארכיטקטורת JVM

1) Classloader

Classloader היא תת-מערכת של JVM המשמשת לטעינת קבצי מחלקה. בכל פעם שאנו מפעילים את תוכנית ה-Java, היא נטען תחילה על ידי ה-classloader. ישנם שלושה מטענים מובנים ב-Java.

    Bootstrap ClassLoader: זהו ה-classloader הראשון שהוא מחלקת העל של Extension classloader. זה טוען את rt.jar קובץ המכיל את כל קבצי המחלקה של Java Standard Edition כמו מחלקות חבילות java.lang, מחלקות חבילות java.net, מחלקות חבילות java.util, מחלקות חבילות java.io, מחלקות חבילות java.sql וכו'.הרחבה ClassLoader: זהו מטעין הכיתה הילד של Bootstrap ומטען הכיתה האב של System classloader. זה טוען את קבצי הצנצנת שנמצאים בפנים $JAVA_HOME/jre/lib/ext מַדרִיך.מערכת/יישום ClassLoader: זהו ה-Classloader הילד של Extension classloader. זה טוען את קבצי הכיתה מ-classpath. כברירת מחדל, classpath מוגדר לספרייה הנוכחית. אתה יכול לשנות את ה-classpath באמצעות מתג '-cp' או '-classpath'. זה ידוע גם בשם Application classloader.
 //Let's see an example to print the classloader name public class ClassLoaderExample { public static void main(String[] args) { // Let's print the classloader name of current class. //Application/System classloader will load this class Class c=ClassLoaderExample.class; System.out.println(c.getClassLoader()); //If we print the classloader name of String, it will print null because it is an //in-built class which is found in rt.jar, so it is loaded by Bootstrap classloader System.out.println(String.class.getClassLoader()); } } 
בדוק את זה עכשיו

תְפוּקָה:

 sun.misc.Launcher$AppClassLoader@4e0e2f2a null 

אלו הם מעמיסי הכיתה הפנימיים שמסופקים על ידי Java. אם ברצונך ליצור מחלק מחלקה משלך, עליך להרחיב את מחלקה ClassLoader.

10 מתוך 60

2) אזור כיתה (שיטה).

Class(Method) Area מאחסן מבנים לפי מחלקה כגון מאגר קבוע של זמן הריצה, נתוני שדה ושיטה, הקוד של המתודות.

3) ערימה

זהו אזור נתוני זמן הריצה שבו מוקצים אובייקטים.

gimp שמור כ-jpeg

4) מחסנית

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

לכל שרשור יש ערימת JVM פרטית, שנוצרה במקביל לשרשור.

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

5) רישום מונה תוכניות

פנקס PC (מונה תוכניות) מכיל את הכתובת של הוראת המכונה הווירטואלית של Java המתבצעת כעת.

6) מחסנית שיטה מקורית

הוא מכיל את כל השיטות המקוריות המשמשות באפליקציה.

7) מנוע ביצוע

זה מכיל:

    מעבד וירטואלי מְתוּרגְמָן:קרא את זרם bytecode ואז בצע את ההוראות.מהדר Just-In-Time (JIT):הוא משמש לשיפור הביצועים. JIT מרכיב חלקים מקוד הבתים בעלי פונקציונליות דומה בו-זמנית, ומכאן מקטין את משך הזמן הדרוש להידור. כאן, המונח 'מהדר' מתייחס למתרגם ממערך ההוראות של מכונה וירטואלית של Java (JVM) למערכת ההוראות של מעבד ספציפי.

8) ממשק מקורי של Java

Java Native Interface (JNI) היא מסגרת המספקת ממשק לתקשורת עם יישום אחר שנכתב בשפה אחרת כמו C, C++, Assembly וכו'. Java משתמשת במסגרת JNI כדי לשלוח פלט לקונסולה או ליצור אינטראקציה עם ספריות מערכת ההפעלה.