ما هو JVM؟ Java آلة افتراضية Architecture
ما هو JVM في Java?
Java الآلة الافتراضية (JVM) هو المحرك الذي يوفر بيئة وقت التشغيل لقيادة Java الكود أو التطبيقات. إنه يحول Java bytecode إلى لغة الآلات. JVM جزء من Java بيئة وقت التشغيل (JRE). في لغات البرمجة الأخرى، يقوم المترجم بإنتاج كود الآلة لنظام معين. لكن، Java يقوم المترجم بإنتاج كود لجهاز ظاهري يعرف باسم Java آلة افتراضية.
كيف يعمل JVM؟
أولا، Java يتم تجميع الكود إلى كود ثنائي. يتم تفسير هذا الكود الثنائي على أجهزة مختلفة. بين النظام المضيف والكمبيوتر، Java المصدر، Bytecode هي لغة وسيطة. JVM في Java هو المسؤول عن تخصيص مساحة الذاكرة.
في هذا البرنامج التعليمي JVM، سوف تتعلم-
Archiبنية JVM (Java (الآلة الافتراضية)
الآن في هذا البرنامج التعليمي JVM، دعونا نفهم Archiبنية JVM. بنية JVM في Java يحتوي على أداة تحميل الفصل ومنطقة الذاكرة ومحرك التنفيذ وما إلى ذلك.
1) محمل الفئة
محمل الفئة هو نظام فرعي يستخدم لتحميل ملفات الفئة. وهو يؤدي ثلاث وظائف رئيسية وهي: التحميل والربط والتهيئة.
2) منطقة الطريقة
تقوم منطقة طريقة JVM بتخزين هياكل الفئات مثل البيانات التعريفية وتجمع وقت التشغيل الثابت والتعليمات البرمجية للطرق.
3) كومة
جميع الأجساميتم تخزين متغيرات المثيلات ذات الصلة والمصفوفات في الكومة. هذه الذاكرة شائعة ومشتركة عبر عدة سلاسل رسائل.
4) مكدسات لغة JVM
Java تخزن مجموعات اللغة المتغيرات المحلية ونتائجها الجزئية. يحتوي كل خيط على مجموعة JVM خاصة به، يتم إنشاؤها في نفس الوقت الذي يتم فيه إنشاء الخيط. يتم إنشاء إطار جديد كلما تم استدعاء طريقة، ويتم حذفه عند اكتمال عملية استدعاء الطريقة.
5) سجلات الكمبيوتر
سجل الكمبيوتر يخزن عنوان Java تعليمات الجهاز الظاهري الذي يتم تنفيذه حاليًا. في Java، كل موضوع له سجل منفصل للكمبيوتر الشخصي.
6) مكدسات الطريقة الأصلية
تحتوي مكدسات الطريقة الأصلية على تعليمات التعليمات البرمجية الأصلية التي تعتمد على المكتبة الأصلية. هو مكتوب بلغة أخرى بدلا من Java.
7) محرك التنفيذ
إنه نوع من البرامج المستخدمة لاختبار الأجهزة أو البرامج أو الأنظمة الكاملة. لا يحمل محرك تنفيذ الاختبار أبدًا أي معلومات حول المنتج الذي تم اختباره.
8) واجهة الطريقة الأصلية
واجهة الطريقة الأصلية هي إطار برمجة. انها تسمح Java الكود الذي يتم تشغيله في JVM للاتصال به بواسطة المكتبات والتطبيقات الأصلية.
9) مكتبات الطريقة الأصلية
المكتبات الأصلية عبارة عن مجموعة من المكتبات الأصلية (C، C++) التي يحتاجها محرك التنفيذ.
عملية تجميع وتنفيذ كود البرنامج
لكي تتمكن من كتابة وتنفيذ برنامج برمجي، فأنت بحاجة إلى ما يلي
1) المحرر – لكتابة البرنامج الخاص بك، يمكن استخدام المفكرة لهذا الغرض
2) مترجم – لتحويل برنامج اللغة العالية الخاص بك إلى رمز الجهاز الأصلي
3) الرابط - لدمج مرجع ملفات البرامج المختلفة في برنامجك الرئيسي معًا.
4) محمل – لتحميل الملفات من جهاز التخزين الثانوي الخاص بك مثل القرص الصلب ومحرك الأقراص المحمول والأقراص المضغوطة إلى ذاكرة الوصول العشوائي للتنفيذ. يتم التحميل تلقائيًا عند تنفيذ التعليمات البرمجية الخاصة بك.
5) التنفيذ – التنفيذ الفعلي للتعليمة البرمجية التي يتم التعامل معها بواسطة نظام التشغيل والمعالج لديك.
مع هذه الخلفية، راجع الفيديو التالي وتعرف على العمل الداخلي وهندسة JVM (Java الآلة الافتراضية).
انقر هنا إذا لم يكن من الممكن الوصول إلى الفيديو
عملية تجميع وتنفيذ كود C
لفهم Java عملية التجميع في Javaدعونا أولاً نلقي نظرة سريعة على عملية التجميع والربط في لغة C.
لنفترض أنك قمت باستدعاء دالتين f1 وf2 في main. يتم تخزين الدالة main في الملف a1.c.
يتم تخزين الدالة f1 في ملف a2.c
يتم تخزين الدالة f2 في ملف a3.c
يتم تغذية كل هذه الملفات، أي a1.c وa2.c وa3.c، إلى المترجم. ويكون الناتج عبارة عن ملفات الكائنات المقابلة التي تمثل كود الآلة.
الخطوة التالية هي دمج جميع ملفات الكائنات هذه في ملف .exe واحد بمساعدة الرابط. سيقوم الرابط بجمع كل هذه الملفات معًا وينتج ملف exe.
أثناء تشغيل البرنامج، سيقوم برنامج التحميل بتحميل ملف a.exe إلى ملف رامات للتنفيذ.
Java تجميع التعليمات البرمجية وتنفيذها في Java VM
الآن في هذا البرنامج التعليمي JVM، دعونا نلقي نظرة على عملية JAVA. بشكل أساسي، لديك طريقتان f1 وf2.
- يتم تخزين الطريقة الرئيسية في الملف a1.java
- يتم تخزين f1 في ملف باسم a2.java
- يتم تخزين f2 في ملف باسم a3.java
سيقوم المترجم بتجميع الملفات الثلاثة وينتج 3 ملفات .class المقابلة والتي تتكون من كود BYTE. على عكس C، لا يتم إجراء أي ربط.
تشير Java جهاز افتراضي أو Java توجد الآلة الافتراضية على ذاكرة الوصول العشوائي (RAM). أثناء التنفيذ، باستخدام محمل الفئة، يتم جلب ملفات الفئة إلى ذاكرة الوصول العشوائي (RAM). يتم التحقق من رمز البايت بحثًا عن أي خروقات أمنية.
بعد ذلك، سيقوم محرك التنفيذ بتحويل البايت كود إلى كود الآلة الأصلي. وهذا يتم في وقت التجميع فقط. وهو أحد الأسباب الرئيسية وراء Java بطيء نسبيًا.
NOTE: JIT أو المترجم في الوقت المناسب هو جزء من Java الآلة الافتراضية (JVM). فهو يفسر جزءًا من Byte Code الذي له وظائف مماثلة في نفس الوقت.
لماذا Java كل من اللغة المفسرة والمترجمة؟
لغات البرمجة تصنف على النحو
- لغة المستوى الأعلى على سبيل المثال. C++, Java
- لغات المستوى المتوسط على سبيل المثال. ج
- اللغة منخفضة المستوى Assembly
- وأخيرًا أدنى مستوى مثل لغة الآلة.
A مترجم هو برنامج يقوم بتحويل البرنامج من مستوى لغة إلى آخر. مثال تحويل C++ برنامج إلى كود آلي. يقوم مُجمِّع Java بتحويل كود Java عالي المستوى إلى كود ثنائي (وهو أيضًا نوع من كود الآلة).
An مترجم هو برنامج يقوم بتحويل برنامج على مستوى واحد إلى لغة برمجة أخرى في نفس المستوى. مثال تحويل Java البرنامج في C++
In Javaيقوم مولد الكود في الوقت المناسب بتحويل الكود الثنائي إلى كود الآلة الأصلي والذي يكون على نفس مستويات البرمجة.
بالتالي، Java يتم تجميعها وكذلك اللغة المفسرة.
لماذا Java بطيء؟
السببان الرئيسيان وراء بطء Java .
- الارتباط الديناميكي: على عكس لغة C، يتم الارتباط في وقت التشغيل، في كل مرة يتم فيها تشغيل البرنامج Java.
- مترجم وقت التشغيل: يتم تحويل كود البايت إلى كود الجهاز الأصلي في وقت التشغيل Java مما يزيد من إبطاء السرعة
ومع ذلك، فإن الإصدار الأخير من Java لقد عالجت اختناقات الأداء إلى حد كبير.
الملخص:
- الشكل الكامل لـ JVM هو Java الآلة الافتراضية. جي في إم في Java هو المحرك الذي يقود Java شفرة. إنه يحول Java bytecode إلى لغة الآلات.
- هندسة JVM في Java يحتوي على أداة تحميل الفصل ومنطقة الذاكرة ومحرك التنفيذ وما إلى ذلك.
- في جي في إم، Java يتم تجميع التعليمات البرمجية إلى bytecode. يتم تفسير هذا الرمز الثانوي على أجهزة مختلفة
- JIT تعني المترجم في الوقت المناسب. JIT هو جزء من Java الآلة الافتراضية (JVM). تُستخدم لتسريع وقت التنفيذ
- بالمقارنة مع أجهزة الترجمة الأخرى، JVM في Java قد يكون بطيئا في التنفيذ.