What is JVM (Java Virtual Machine)? ما هو JVM (آلة جافا الافتراضية)؟

What is JVM (Java Virtual Machine)? ما هو JVM (آلة جافا الافتراضية)؟

What is JVM (Java Virtual Machine)? ما هو JVM (آلة جافا الافتراضية)؟

What is JVM (Java Virtual Machine)? ما هو JVM (آلة جافا الافتراضية)؟

JVM (Java Virtual Machine) هي آلة مجردة.  وهي مواصفة توفر بيئة تشغيل يمكن فيها تنفيذ java bytecode.


 تتوفر JVMs للعديد من الأنظمة الأساسية للأجهزة والبرامج (على سبيل المثال ، تعتمد JVM على النظام الأساسي).


 ما هو JVM

مواصفة حيث يتم تحديد عمل Java Virtual Machine.  لكن مزود التنفيذ مستقل لاختيار الخوارزمية.  تم تنفيذ ذلك من قبل شركة أوراكل وشركات أخرى.

  •  يُعرف تطبيقه باسم JRE (Java Runtime Environment).
  •  مثيل وقت التشغيل عندما تكتب أمر java في موجه الأوامر لتشغيل فئة java ، يتم إنشاء مثيل لـ JVM.

 ماذا تفعل آلة جافا الافتراضية؟ 

يقوم JVM بتنفيذ العملية التالية:
  •  يحمل كود 
  •  يتحقق من الرمز
  •  ينفذ الكود
  •  يوفر بيئة وقت التشغيل

 يوفر JVM تعريفات لـ:

  • منطقة الذاكرة
  •  تنسيق ملف الفصل
  •  مجموعة التسجيل
  •  منظف الذاكرة المسَاماة بجامع القمامة garbage collection التي تم جمعها
  •  الإبلاغ عن خطأ فادح وما إلى ذلك.

شرح الهندسة المعمارية JVM

 دعونا نفهم البنية الداخلية لـ JVM.  يحتوي على محمل الفئة ومنطقة الذاكرة ومحرك التنفيذ وما إلى ذلك.

شرح الهندسة المعمارية JVM

محمل الفئة  Class loader 

 Classloader هو نظام فرعي من JVM يستخدم لتحميل ملفات الفئات.  عندما نقوم بتشغيل برنامج جافا ، يتم تحميله أولاً بواسطة أداة تحميل VM الفئة.  هناك ثلاثة محمل فئات مدمج في Java.

  1.  Bootstrap ClassLoader: هذا هو أول محمل فئة وهو فئة فائقة من محمل فئة الامتداد.  يقوم بتحميل ملف rt.jar الذي يحتوي على جميع ملفات فئات Java Standard Edition مثل فئات حزم java.lang وفئات حزم java.net وفئات حزم java.util وفئات حزم java.io وفئات حزم java.sql إلخ.
  2.  ملحق ClassLoader: هذا هو أداة تحميل الفئة التابعة لـ Bootstrap ومحمل فئة الأصل لمحمل فئة النظام.  يقوم بتحميل ملفات jar الموجودة داخل الدليل $ JAVA_HOME / jre / lib / ext.
  3.  System / Application ClassLoader: هذا هو أداة تحميل فئة تابعة لمحمل تمديد.  يقوم بتحميل classfiles من classpath.  بشكل افتراضي ، يتم تعيين classpath إلى الدليل الحالي.  يمكنك تغيير classpath باستخدام مفتاح التبديل "-cp" أو "-classpath".  يُعرف أيضًا باسم محمل فئة التطبيقات.
//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.

 2) منطقة الطبقة (دالة)

 تخزن منطقة الفئة (دالة) الهياكل لكل فئة مثل التجمع الثابت لوقت التشغيل وبيانات الحقل الدالة ورمز الدوال .

 3) heap هياكل بيانات على شكل شجرة متخصصة 

 إنها منطقة بيانات وقت التشغيل التي يتم فيها تخصيص الكائنات.

 4) stack المكدس

 يخزن Java Stack الإطارات.  يحمل المتغيرات المحلية والنتائج الجزئية ، ويلعب دورًا في استدعاء العودة والعودة.

 يحتوي كل مؤشر ترابط على مكدس JVM خاص ، يتم إنشاؤه في نفس وقت إنشاء الخيط.

 يتم إنشاء إطار جديد في كل مرة يتم فيها استدعاء طريقة.  يتم إتلاف الإطار عند اكتمال استدعاء الأسلوب الخاص به.

 5) سجل عداد البرنامج

 يحتوي سجل جهاز الكمبيوتر (عداد البرامج) على عنوان تعليمات جهاز Java الظاهري الجاري تنفيذه حاليًا.

 6) مكدس الدالة الأصلية

 يحتوي على جميع الدوال الأصلية المستخدمة في التطبيق.

 7) محرك التنفيذ

 أه يحتوي على:

 معالج افتراضي
 المترجم الفوري: اقرأ تدفق الرمز الثنائي ثم نفذ التعليمات.
 مترجم Just-In-Time (JIT): يستخدم لتحسين الأداء.  يقوم JIT بتجميع أجزاء من كود البايت لها وظائف مماثلة في نفس الوقت ، وبالتالي يقلل من مقدار الوقت اللازم للتجميع.  هنا ، يشير المصطلح "مترجم" إلى مترجم من مجموعة التعليمات الخاصة بجهاز Java الظاهري (JVM) إلى مجموعة التعليمات الخاصة بوحدة معالجة مركزية معينة.

 8) واجهة جافا الأصلية

 Java Native Interface (JNI) هو إطار يوفر واجهة للتواصل مع تطبيق آخر مكتوب بلغة أخرى مثل C و C ++ و Assembly وما إلى ذلك.  يستخدم Java إطار عمل JNI لإرسال الإخراج إلى وحدة التحكم أو التفاعل مع مكتبات نظام التشغيل.

اقرأ أيضا في دروس تعلم عن جافا 

  1.   ماهي المشيدات في جافا ولماذا تستخدم مع أمثلة؟ 
  2. What are the advantages and disadvantages of Java programming language cons and pros? ما هي مزايا وعيوب لغة برمجة جافا  سلبياتها وإيجابياتها ؟
  3. How is C++ different from Java? ما الفرق بين لغة جافا وسي بلص بلص؟ مقارنة
  4.   First Java Program | Hello World Example أول برنامج جافا | مثال مرحبا العالم
  5.   How a Java program is compiled and run?كيف يتم تجميع وتشغيل برنامج جافا؟
  6.  How to set path in Java? كيف تغير مسار الدليل او المجلد في مكتبة جافا
  7.   What are the Difference between JDK, JRE, and JVM? ما هو الفرق بين JDK و JRE و JVM