ما هي JVM؟ اشرح JVM Architecture

⚡ ملخص ذكي

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

  • 🧩 جسر بايت كود: استخدم Java يقوم المترجم بإنتاج رمز بايت بدلاً من رمز الآلة، وتقوم آلة جافا الافتراضية بتفسير رمز البايت هذا على أي نظام مضيف.
  • ؟؟؟؟ ️ جوهر Archiالبنية: تجمع JVM بين ClassLoader ومنطقة الأساليب والكومة والمكدسات وسجلات PC ومحرك التنفيذ لتشغيل البرامج.
  • 🔄 مسار التجميع: على عكس ج، Java لا يتطلب الأمر أي ربط؛ يتم تحميل ملفات الفئة في ذاكرة الوصول العشوائي، والتحقق منها، ثم تنفيذها في وقت التشغيل.
  • مُجمِّع JIT: يقوم المترجم الفوري بتحويل التعليمات البرمجية الوسيطة إلى تعليمات برمجية أصلية للآلة أثناء التنفيذ لتحسين الأداء.
  • 🐢 ملاحظة الأداء: تاريخياً، جعل الربط الديناميكي والتفسير في وقت التشغيل Java أبطأ، على الرغم من أن الإصدارات الحديثة تسد هذه الفجوة إلى حد كبير.

JVM Architecture

ما هو JVM في Java?

Java الآلة الافتراضية (JVM) هو محرك يوفر بيئة تشغيل لقيادة Java يقوم بتحويل التعليمات البرمجية أو التطبيقات. Java bytecode إلى لغة الآلة. JVM هو جزء من Java بيئة التشغيل (JRE). في لغات البرمجة الأخرى، يُنتج المُترجم رمز الآلة لنظام معين. ومع ذلك، فإن Java يقوم المترجم بإنتاج التعليمات البرمجية لآلة افتراضية تُعرف باسم Java آلة افتراضية.

كيف يعمل JVM؟

أولا، Java يتم تجميع الكود إلى بايت كود. ويتم تفسير هذا البايت كود على أجهزة مختلفة. بين النظام المضيف و Java المصدر، البايت كود هو لغة وسيطة. JVM في Java هو المسؤول عن تخصيص مساحة الذاكرة.

يعمل Java آلة افتراضية JVM

يعمل Java الآلة الافتراضية (JVM)

Archiبنية JVM (Java (الآلة الافتراضية)

والآن، دعونا نفهم بنية JVM. بنية JVM في Java يحتوي على مُحمِّل فئات، ومنطقة ذاكرة، ومحرك تنفيذ، وغير ذلك.

JVM Architecture

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.

دالة رئيسية في كود C a1.c

يتم تخزين الدالة f1 في الملف a2.c.

دالة كود C f1 a2.c

يتم تخزين الدالة f2 في الملف a3.c.

دالة كود C f2 a3.c

يتم تغذية جميع هذه الملفات، أي a1.c و a2.c و a3.c، إلى المترجم، الذي يكون ناتجه هو ملفات الكائنات المقابلة، وهي عبارة عن رمز الآلة.

يقوم مترجم كود C بإنتاج ملفات الكائنات

تتمثل الخطوة التالية في دمج جميع ملفات الكائنات هذه في ملف تنفيذي واحد (.exe) باستخدام برنامج الربط. سيقوم برنامج الربط بتجميع جميع هذه الملفات معًا وإنتاج الملف التنفيذي (.exe).

يقوم رابط كود C بإنتاج ملف تنفيذي (exe).

أثناء تشغيل البرنامج، سيقوم برنامج التحميل بتحميل ملف a.exe في رامات للتنفيذ.

يقوم مُحمِّل كود C بتحميل ملف exe إلى ذاكرة الوصول العشوائي (RAM).

Java تجميع التعليمات البرمجية وتنفيذها في Java VM

والآن، دعونا نلقي نظرة على عملية Javaفي الدالة الرئيسية لديك طريقتان، f1 و f2.

  • يتم تخزين الدالة الرئيسية في الملف a1.java
  • يتم تخزين f1 في ملف باسم a2.java
  • يتم تخزين f2 في ملف باسم a3.java

Java يقوم الكود بتجميع ثلاثة ملفات إلى ملفات فئة

سيقوم المترجم بتجميع الملفات الثلاثة وإنتاج ثلاثة ملفات .class مقابلة، والتي تتكون من رمز BYTE. على عكس لغة C، لا يتم إجراء أي ربط.

استخدم Java VM الذهب Java توجد الآلة الافتراضية في ذاكرة الوصول العشوائي (RAM). أثناء التنفيذ، يتم جلب ملفات الفئات إلى ذاكرة الوصول العشوائي باستخدام مُحمِّل الفئات. ويتم التحقق من رمز البايت للتأكد من خلوه من أي ثغرات أمنية.

Java يقوم مُحمِّل الفئات بجلب ملفات الفئات إلى ذاكرة الوصول العشوائي (RAM).

بعد ذلك، يقوم محرك التنفيذ بتحويل الشفرة الوسيطة إلى شفرة الآلة الأصلية. هذه هي عملية الترجمة الفورية. وهي أحد الأسباب الرئيسية لـ Java بطيء نسبيًا.

Java محرك التنفيذ يحول الشفرة البايتية إلى شفرة أصلية

NOTE: JIT، أو المترجم الفوري، هو جزء من Java الآلة الافتراضية (JVM). تقوم بتفسير أجزاء من التعليمات البرمجية الثنائية التي لها وظائف مماثلة في نفس الوقت.

لماذا Java كل من اللغة المفسرة والمترجمة؟

لغات البرمجة تُصنف على النحو التالي:

  • لغة المستوى الأعلى، على سبيل المثال، C++, Java
  • لغات المستوى المتوسط، على سبيل المثال، لغة C
  • لغة منخفضة المستوى، على سبيل المثال، Assembly
  • وأخيرًا، المستوى الأدنى كلغة الآلة

A مترجم هو برنامج يقوم بتحويل برنامج من مستوى لغة إلى آخر. على سبيل المثال، تحويل C++ تحويل البرنامج إلى لغة الآلة. Java يقوم المترجم بتحويل المستوى العالي Java تحويل الشفرة إلى بايت كود (وهو أيضاً نوع من أنواع شفرة الآلة).

An مترجم هو برنامج يقوم بتحويل برنامج ما من مستوى إلى آخر باستخدام لغة برمجة معينة. نفس المستوىعلى سبيل المثال، تحويل Java البرنامج في C++.

In Javaيقوم مولد الشفرة في الوقت المناسب بتحويل الشفرة البايتية إلى شفرة الآلة الأصلية، وكلاهما على نفس مستوى البرمجة. وبالتالي، Java هي لغة مُجمّعة ومُفسّرة في آن واحد.

لماذا Java بطيء؟

السببان الرئيسيان وراء بطء Java هي:

  1. الارتباط الديناميكي: على عكس لغة C، يتم الارتباط في وقت التشغيل، في كل مرة يتم فيها تشغيل البرنامج Java.
  2. مترجم وقت التشغيل: يتم تحويل كود البايت إلى كود الجهاز الأصلي في وقت التشغيل Javaمما يؤدي إلى إبطاء السرعة بشكل أكبر.

لكن أحدث إصدارات Java لقد عالجنا هذه المعوقات المتعلقة بالأداء إلى حد كبير.

الأسئلة الشائعة

تقوم آلة جافا الافتراضية بتشغيل أطر عمل الذكاء الاصطناعي والبيانات الضخمة مثل Deeplearning4j وWeka وApache Sparkتتيح خاصية الترجمة الفورية وإدارة الذاكرة لهذه المكتبات معالجة مجموعات البيانات الكبيرة بكفاءة عبر المنصات دون إعادة كتابة التعليمات البرمجية الأصلية.

نعم. يمكن لأدوات تحليل الأداء المدعومة بالذكاء الاصطناعي تحليل سجلات جمع البيانات المهملة، واقتراح أحجام الذاكرة المخصصة، وتحديد الطرق البطيئة. كما أنها تساعد في ضبط إعدادات JVM وتحديد الاختناقات بشكل أسرع، مع ذلك، ينبغي على المطور التحقق من صحة كل تغيير مُقترح.

تقوم آلة جافا الافتراضية (JVM) بتشغيل التعليمات البرمجية الوسيطة (bytecode). أما بيئة تشغيل جافا (JRE) فتضمّن آلة جافا الافتراضية مع المكتبات الأساسية اللازمة لتشغيلها. Java البرامج. يضيف JDK أدوات التطوير مثل المترجم والمصحح، لذلك يتم استخدامه لبناء التطبيقات.

يُعدّ رمز البايت مستقلاً عن النظام الأساسي، بينما تعتمد آلة جافا الافتراضية (JVM) نفسها على النظام الأساسي. يحتاج كل نظام تشغيل إلى تطبيق JVM خاص به. يتيح هذا التصميم تشغيل رمز البايت المُجمّع نفسه في أي مكان تُثبّت فيه آلة جافا افتراضية متوافقة.

تلخيص هذه التدوينة بـ: