برنامج OpenJ9

إكليبس OpenJ9
المؤلف(ون) الأصلي(ون)آي بي إم
المطور(ون)مؤسسة إكليبس
إصدار مستقر
0.48.0 [1]  / 5 نوفمبر 2024 ؛ منذ 57 يومًا ( 5 نوفمبر 2024 )
مستودع
  • github.com/eclipse/openj9
مكتوب فيسي ، سي++ ، جافا ، التجميع
نظام التشغيلLinux ، AIX ، Windows ، macOS ، z/OS ، IBM i
يكتبآلة جافا الافتراضية
رخصةرخصة أباتشي 2.0

رخصة Eclipse العامة 2.0

رخصة جنو العمومية، الإصدار 2 مع استثناء GNU Classpath

رخصة جنو العمومية، الإصدار 2 مع استثناء التجميع OpenJDK [2]
موقع إلكترونيwww.eclipse.org/openj9/ 

Eclipse OpenJ9 (المعروف سابقًا باسم IBM J9 ) هو تنفيذ عالي الأداء وقابل للتطوير لآلة Java الافتراضية (JVM) وهو متوافق تمامًا مع مواصفات آلة Java الافتراضية. [3]

يمكن بناء OpenJ9 من المصدر، أو يمكن استخدامه مع الثنائيات المعدة مسبقًا والمتوفرة في مشروع IBM Semeru Runtimes لعدد من المنصات بما في ذلك Linux و Windows [4] و macOS . يعد OpenJ9 أيضًا مكونًا أساسيًا لمجموعة مطوري IBM، والتي تم تضمينها في العديد من منتجات IBM الوسيطة، بما في ذلك WebSphere Application Server و Websphere Liberty . يعد OpenJ9 أيضًا أحد مكونات Open Liberty. [5]

تضمن خيارات التكوين الشاملة إمكانية ضبط JVM لتلبية متطلبات مجموعة واسعة من تطبيقات Java، بدءًا من تطبيقات المؤسسات المعقدة التي تعمل على أجهزة الحاسب الآلي المركزية إلى التطبيقات قصيرة العمر التي تعمل على خدمات سحابية تعتمد على الحاويات.

تاريخ

يعود أصل OpenJ9 إلى منتج ENVY/Smalltalk الذي طورته شركة Object Technology International (OTI). اشترت شركة IBM شركة OTI في عام 1996 لخبرتها في Smalltalk ومنتجاتها. ومع ذلك، عندما ظهرت لغة Java كلغة رائدة لسوق المؤسسات، تم تعديل آلة Smalltalk الافتراضية الحالية لمعالجة أكواد Java الثنائية بدلاً من ذلك. تطور الاسم J9 من اتفاقية تسمية كود مصدر Smalltalk، K8 . K→J (خطوة إلى الوراء) لأن المطورين اعتقدوا أن Smalltalk أفضل من Java، ولكن 8→9 (خطوة إلى الأمام) لأن الآلة الافتراضية الجديدة ستكون أفضل من ذي قبل. [6]

أصبح J9 JVM محرك وقت التشغيل للعديد من منتجات البرامج الوسيطة الخاصة بشركة IBM، حيث بنى سمعته للأداء العالي وقابلية التوسع والموثوقية.

في عام 2017، أصبح J9 مشروعًا تابعًا لمؤسسة Eclipse تحت اسم Eclipse OpenJ9 . وتستمر IBM في المشاركة بنشاط في المشروع وتستمر في وضع Java VM هذه في صميم العديد من عروض البرامج. في مؤسسة Eclipse، يتم تصنيف OpenJ9 كمشروع حاضن، مع إصدار أول، v0.8.0، في عام 2018.

سمات

يتوافق Eclipse OpenJ9 JVM بشكل كامل مع مواصفات Java JVM. يمكن استخدام نفس إصدار JVM في OpenJDK 8 والإصدارات الأحدث، مما يعني أنه يمكن استغلال العديد من الميزات والتحسينات بواسطة التطبيقات التي تعمل على إصدارات مختلفة من Java. مقارنةً بـ Oracle 's HotSpot VM، فإن OpenJ9 يروج لأداء بدء تشغيل أعلى واستهلاك أقل للذاكرة بمعدل إنتاج إجمالي مماثل. [7]

يتضمن Eclipse OpenJ9 Eclipse OMR ، والذي يوفر مكونات وقت التشغيل الأساسية التي يمكن استخدامها لبناء بيئات وقت التشغيل للغات برمجة مختلفة. في مشروع OpenJ9، تضيف طبقة إضافية من التعليمات البرمجية دلالات اللغة لتوفير بيئة وقت التشغيل لتطبيقات Java. [8]

يتم وصف المكونات التي يتكون منها Eclipse OpenJ9 في الأقسام التالية:

مُجمِّع JIT

يعمل Just -In-Time (JIT) على تحسين أداء تطبيقات Java من خلال تجميع بايت كود Java المحايد للمنصة في كود الآلة الأصلي في وقت التشغيل. لا يتم تجميع كل طريقة يتم استدعاؤها بواسطة تطبيق. بدلاً من ذلك، يسجل OpenJ9 عدد المرات التي يتم فيها استدعاء الطريقة ويحفز تجميع JIT عند حد محدد مسبقًا. يقوم مُجمِّع JIT بتجميع الطرق عند مستويات تحسين مختلفة: بارد ، دافئ ، ساخن ، ساخن جدًا (مع تحديد الملف الشخصي) ، أو حارق . كلما كان مستوى التحسين أعلى، كان الأداء المتوقع أفضل، ولكن التكلفة أعلى من حيث وحدة المعالجة المركزية والذاكرة. تستخدم مستويات التحسين الأعلى تقنيات خاصة مثل تحليل الإفلات وإزالة التكرار الجزئي، أو تكرار تسلسلات تحسين معينة مرات أكثر. على الرغم من أن هذه التقنيات تستخدم المزيد من وحدة المعالجة المركزية والذاكرة، إلا أن الأداء المحسن الذي توفره عمليات التحسين يمكن أن يجعل المقايضة جديرة بالاهتمام.

مُجمِّع AOT

التجميع المسبق (AOT) هو آلية لتحسين أداء بدء التشغيل. يتم تجميع الأساليب ديناميكيًا في كود AOT في وقت التشغيل، مما يمكّن JVM من بدء تشغيل التطبيق بشكل أسرع. يتم تمكين AOT تلقائيًا عند استخدام مشاركة بيانات الفئة ( -Xshareclasses ) ولا يتطلب أي ضبط خاص. يختار OpenJ9 تلقائيًا الأساليب التي سيتم تجميعها بناءً على القواعد التي تحدد مرحلة بدء تشغيل التطبيقات الكبيرة. بالنسبة للتطبيقات الصغيرة أو قصيرة التشغيل، يجب إضافة خيار -Xtune:virtualized للحصول على أقصى استفادة من الكود المجمّع بواسطة AOT.

مشاركة بيانات الفصل

تتمتع مشاركة بيانات الفئة بين JVMs بفائدتين رئيسيتين:

  1. يتم تحسين أداء بدء التشغيل عن طريق وضع الفئات التي يحتاجها التطبيق عند التهيئة في ذاكرة التخزين المؤقت للفئات المشتركة.
  2. يتم تقليل حجم الذاكرة من خلال مشاركة الفئات المشتركة بين التطبيقات التي تعمل في أجهزة Java VM منفصلة.

على عكس تطبيقات مشاركة بيانات الفئات (CDS) الأخرى، فإن تمكين الميزة في OpenJ9 يتطلب خطوة واحدة فقط: تعيين -Xshareclasses على سطر الأوامر عند بدء تشغيل التطبيق. عند تحديد ذلك، ينشئ OpenJ9 ملفًا مخصصًا للذاكرة لتخزين الفئات ومشاركتها في الذاكرة. بشكل افتراضي، يشارك OpenJ9 دائمًا كلًا من فئات التمهيد والتطبيق التي يتم تحميلها بواسطة محمل فئة النظام الافتراضي. ميزة أخرى لتطبيق OpenJ9 CDS هي أن ذاكرة التخزين المؤقت يتم تحديثها ديناميكيًا. لذلك عندما يقوم التطبيق بتحميل فئات جديدة، تقوم JVM تلقائيًا بتخزينها في ذاكرة التخزين المؤقت دون أي تدخل من المستخدم. [9]

يوفر OpenJ9 أيضًا واجهة برمجة تطبيقات مساعدة عامة لدمج دعم مشاركة الفئة في محملات الفئة المخصصة، بالإضافة إلى العديد من الأدوات المساعدة لإدارة ذاكرة التخزين المؤقت النشطة.

جامع القمامة

لمنع نفاد ذاكرة التطبيقات، يجب استعادة الكائنات الموجودة في كومة Java التي لم تعد مطلوبة. تُعرف هذه العملية باسم جمع القمامة (GC). يوفر OpenJ9 عددًا من سياسات جمع القمامة المصممة حول أنواع مختلفة من التطبيقات وأحمال العمل. يعتمد اختيار السياسة الصحيحة على أهداف الاستخدام والأداء. بشكل افتراضي، يستخدم OpenJ9 -Xgcpolicy:genconسياسة Generational Concurrent ( )، وهي الأنسب للتطبيقات المعاملاتية التي تحتوي على العديد من الكائنات قصيرة العمر. تتوفر سياسات بديلة، بما في ذلك تلك التي تلبي احتياجات التطبيقات ذات أكوام Java الكبيرة ( -Xgcpolicy:balanced)، والتطبيقات الحساسة لوقت الاستجابة ( -Xgcpolicy:metronome)، أو التطبيقات التي تتطلب معدل إنتاجية مرتفع للتطبيق ( -Xgcpolicy:optthruput).

يؤدي خيار "الضبط الخامل" ( -XX:+IdleTuningGcOnIdle) إلى تشغيل عملية جمع القمامة في OpenJ9 عندما يكون التطبيق خاملاً. يؤدي القيام بذلك إلى تقليل مساحة الذاكرة، وهو أمر مفيد لبعض خطط الفوترة للاستضافة الافتراضية . [7]

خادم JIT

في يناير 2020، قدمت OpenJ9 ميزة تجريبية لتجميع الكود في JIT خارج JVM وعن بعد على الخادم.

مكون التشخيص

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

تفريغات جافا
يتم إنتاج هذه البيانات عندما تنتهي JVM بشكل غير متوقع بسبب إشارة نظام التشغيل، أو استثناء OutOfMemoryError ، أو مجموعة ضغطات المفاتيح التي بدأها المستخدم. تلخص ملفات Java حالة JVM عندما يحدث الحدث، مع ارتباط معظم المعلومات بمكونات JVM.
أكوام النفايات
تعرض عمليات تفريغ الكومة جميع الكائنات الحية على كومة Java عندما تنتهي JVM بسبب استثناء OutOfMemoryError أو عند طلبها من قبل المستخدم. تتضمن المعلومات عنوان الكائن، أو نوعه أو اسم الفئة، أو حجمه، والمراجع إلى كائنات أخرى. قد يخبرك تحليل عمليات تفريغ الكومة بالكائنات التي تستخدم كميات كبيرة من الذاكرة على كومة Java ولماذا لا يتم جمعها في سلة المهملات.
تفريغات النظام
غالبًا ما تُعرف هذه الملفات باسم ملفات التفريغ الأساسية ، وهي ملفات خاصة بالمنصة وتحتوي على ملف تفريغ ثنائي خام لذاكرة العملية. يحتوي هذا الملف التفريغ على نسخة كاملة من كومة Java، بما في ذلك محتويات جميع كائنات Java في التطبيق. تتوفر أدوات OpenJ9 لمعالجة ملف تفريغ النظام إلى تنسيق قابل للقراءة للتحليل.
بيانات جمع القمامة
لتحليل مشكلات جمع القمامة، يمكنك تمكين التسجيل المفصل، الذي يوفر بيانات عن جميع عمليات جمع القمامة بما في ذلك التهيئة، ومعالجة إيقاف العالم، والإنهاء، ومعالجة المرجع، وفشل التخصيص. لمزيد من التحليل التفصيلي، يمكنك تشغيل تتبع جمع القمامة.
تتبع البيانات
يمكن استخدام مرفق التتبع OpenJ9 لتتبع التطبيقات أو طرق Java أو عمليات JVM الداخلية مع الحد الأدنى من التأثير على الأداء.
بيانات JIT
إذا حدث خطأ حماية عام أو حدث إيقاف، يقوم JIT بإنتاج تفريغ ثنائي صغير يمكن تحليله بواسطة مطوري OpenJ9 للمساعدة في تحديد السبب الجذري.
بيانات الفصول المشتركة
يوفر مكون بيانات الفئات المشتركة بعض الخيارات المفصلة التي يمكن استخدامها في وقت التشغيل لإظهار نشاط ذاكرة التخزين المؤقت. تتيح لك أدوات printStats و printAllStats تحليل محتويات ذاكرة التخزين المؤقت للفئة المشتركة.

يتضمن مكون التشخيص أيضًا واجهة برمجة تطبيقات DTFJ، والتي يمكن استخدامها لبناء أدوات التشخيص. يعمل DTFJ مع البيانات من تفريغ النظام أو تفريغ Java.

التبني

  • يتم الآن بناء إصدارات مجتمع IBM:Semeru Runtime (OpenJ9 مع OpenJDK) واختبارها وتوزيعها باعتبارها IBM Semeru. [10] تستخدم أوقات تشغيل Semeru JVM OpenJ9 مع مكتبات فئة OpenJDK .
  • Apache OpenWhisk : يستخدم OpenWhisk OpenJ9 باعتباره JVM للإجراءات. [11]
  • Eclipse IDE : وافقت مؤسسة Eclipse على تضمين OpenJDK 8 مع OpenJ9 في بيئة التطوير المتكاملة Eclipse (IDE).

انظر أيضا

مراجع

  1. ^ "الإصدار 0.48.0". 5 نوفمبر 2024. تم الاسترجاع 24 نوفمبر 2024 .
  2. ^ "openj9/LICENSE at openj9-0.24.0 · eclipse/openj9". GitHub . تم الاسترجاع في 6 مارس 2021 .
  3. ^ ليوناردو زانيفان (7 فبراير 2018). "آلة JVM مفتوحة المصدر جديدة مُحسَّنة للسحابة والخدمات المصغرة". medium .
  4. ^ هولجر فورمان (14 مارس 2018). "مرحبًا OpenJ9 على Windows، لم أتوقع قدومك بهذه السرعة!". DZone .
  5. ^ ديفيد روبنشتاين (20 سبتمبر 2017). "IBM تطلق كود WebSphere Liberty للمصدر المفتوح". SD Times .
  6. ^ رونالد سيرفانت (18 سبتمبر 2017). "كيف حصل J9 في OpenJ9 على اسمه". medium .
  7. ^ بواسطة دان هيدينجا (6 يونيو 2018). "Eclipse OpenJ9؛ ليس مجرد أي آلة افتراضية Java". JAXenter .
  8. ^ مونيكا بيكويث (1 مارس 2018). "Eclipse OpenJ9 - آلة افتراضية مفتوحة المصدر تعتمد على مشروع Eclipse OMR". InfoQ .
  9. ^ كوري، بن؛ شاو، هانج (6 يونيو 2018). "مشاركة الفصل في Eclipse OpenJ9". IBM developerWorks .
  10. ^ IBM (18 أغسطس 2023). "تقديم بيئات تشغيل IBM Semeru المجانية لتطوير وتشغيل تطبيقات Java". IBM Developer .
  11. ^ Parameswaran Selvam (9 مارس 2018). "إجراءات Apache OpenWhisk Java على Eclipse OpenJ9 Runtime". medium .
  • الموقع الرسمي
    • وثائق مستخدم OpenJ9
  • صفحة مشروع Eclipse Foundation OpenJ9
  • openj9 على GitHub
  • مدونة OpenJ9
  • UbiComp:Hacking:Java:J9 في جامعة واشنطن للعلوم والهندسة الحاسوبية
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=OpenJ9&oldid=1232792110"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate