ما هي JVM؟ اشرح JVM Architecture
⚡ ملخص ذكي
Java الآلة الافتراضية (JVM) هي المحرك الذي يوفر بيئة تشغيل لتشغيل Java يقوم هذا الكود بتحويل الشفرة البايتية المستقلة عن المنصة إلى لغة الآلة الأصلية. وهو يشكل جزءًا من Java بيئة التشغيل وتمكينها Javaقابلية النقل التي تتيح الكتابة مرة واحدة والتشغيل في أي مكان.

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











