سؤال

أستاذي هل غير رسمية المؤشر على برنامج صغير و جافا الأوقات:1.7 ثانية عن الجولة الأولى ، و 0.8 ثانية يعمل بعد ذلك.

  • هل هذا بسبب كليا التحميل من بيئة وقت التشغيل البيئة ؟

    أو

  • هو يتأثر جافا تحسين رمز وتخزين نتائج هذه التحسينات (آسف, أنا لا أعرف المصطلح التقني لهذه)?

هل كانت مفيدة؟

المحلول

أوافق على أن الفارق في الأداء يراها الملصق هو الأكثر احتمالا بسبب استتار القرص جلب JRE في الذاكرة.فقط في وقت التحويل البرمجي (JIT) لن يكون لها تأثير على أداء القليل من التطبيق.

جافا 1.6u10 (http://download.java.net/jdk6/) اللمسات وقت تشغيل الجرار في عملية خلفية (حتى لو كان جافا لا تعمل) للحفاظ على البيانات في التخزين المؤقت على القرص.هذا يقلل بشكل كبير أوقات بدء التشغيل (الذي هو فائدة كبيرة من تطبيقات سطح المكتب, ولكن ربما من قيمة هامشية إلى جانب الخادم تطبيقات).

كبيرة, طويلة التطبيقات قيد التشغيل ، JIT يجعل فرقا كبيرا مع مرور الوقت - ولكن كمية الوقت اللازم JIT إلى جمع ما يكفي من الإحصاءات إلى ركلة وتحسين (5-10 ثواني) هو قصير جدا جدا بالمقارنة مع مجمل الحياة من التطبيق (في معظم تشغيل لشهور وشهور).في حين أن تخزين واستعادة JIT نتائج مثيرة للاهتمام الأكاديمي ممارسة العملية تحسن ليست كبيرة جدا (وهذا هو السبب JIT الفريق كان أكثر تركيزا على الأمور مثل GC استراتيجيات تقليل ذاكرة التخزين المؤقت يخطئ ، الخ...).

قبل تجميع الطبقات وقت التشغيل لا تساعد تطبيقات سطح المكتب قليلا جدا (كما يفعل المذكورة 6u10 التخزين المؤقت على القرص قبل التحميل).

نصائح أخرى

حسنا, لقد وجدت أين قرأت ذلك.هذا هو كل شيء عن "تعلم جافا" (أورايلي 2005):

المشكلة مع التقليدية JIT تجميع هو أن تحسين رمز يستغرق وقتا طويلا.لذلك مترجم JIT يمكن أن تنتج نتائج لائقة ولكن قد تعاني كبيرة من الكمون عند التطبيق يبدأ.هذا هو عموما ليست مشكلة لفترة طويلة-تشغيل تطبيقات الخادم ولكن هو مشكلة خطيرة من جانب العميل البرمجيات و تطبيقات تعمل على أجهزة أصغر حجما مع قدرات محدودة.لمعالجة هذه الشمس مترجم تقنية تسمى نقطة ساخنة, يستخدم خدعة تسمى التكيف تجميع.إذا كنت ننظر في ما هي البرامج التي يقضون وقتهم في القيام ، اتضح أنهم يقضون جل وقتهم تنفيذ جزء صغير نسبيا من التعليمات البرمجية مرة أخرى و مرة أخرى.قطعة من التعليمات البرمجية التي يتم تنفيذها بشكل متكرر قد يكون سوى جزء صغير من إجمالي البرنامج ، ولكن سلوكها يحدد برنامج الأداء العام.التكيف تجميع يسمح أيضا جافا للاستفادة من أنواع جديدة من التحسينات التي ببساطة لا يمكن القيام به في ثابت جمعت اللغة ، ومن ثم الادعاء بأن كود جافا يمكن تشغيل أسرع من C/C++ في بعض الحالات.

للاستفادة من هذا الواقع, نقطة يبدأ بها باعتبارها طبيعية جافا بايت كود مترجم, ولكن مع الفارق:ومن التدابير (ملامح) الكود كما هو تنفيذ لمعرفة ما هي الأجزاء التي يجري تنفيذها مرارا وتكرارا.بمجرد أن يعرف أي أجزاء من رمز حاسمة الأداء, نقطة ساخنة تجمع تلك الأجزاء إلى الأمثل رمز الجهاز الأصلي.لأنه يجمع سوى جزء صغير من البرنامج إلى رمز الجهاز ، تستطيع أن تأخذ الوقت اللازم لتحسين تلك الأجزاء.بقية البرنامج قد لا تحتاج إلى ترجمة على الإطلاق—مجرد تفسير لتوفير الذاكرة و الوقت.في الواقع, الشمس الافتراضي Java VM يمكن تشغيل في أحد وضعين:العميل و الخادم التي تقول أنه إذا كان التأكيد على بدء التشغيل السريع الوقت و حفظ الذاكرة أو شقة من أصل الأداء.

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

أنا أتساءل الآن كيف الشمس قد حصلت معه منذ جافا 5.0.

أنا لست على علم بأي الجهاز الظاهري في استخدام على نطاق واسع أن يحفظ الإحصائية بيانات الاستخدام بين الدعاء البرنامج لكن هو بالتأكيد مثيرة للاهتمام إمكانية للبحث في المستقبل.

ما ترونه هو بالتأكيد بسبب التخزين المؤقت على القرص.

أوافق على أن ذلك المحتمل نتيجة التخزين المؤقت على القرص.

لمعلوماتك, IBM جافا 6 VM لا تحتوي على الموعد المحدد مترجم (AOT).المدونة ليست تماما كما الأمثل مثل ما جيت من شأنها أن تنتج ، ولكن يتم تخزينها عبر نظام رصد السفن ، وأعتقد في نوع من استمرار الذاكرة المشتركة.الفائدة الأساسية لها هو تحسين الأداء بدء التشغيل.IBM VM بشكل افتراضي JITs طريقة بعد ان كان يسمى 1000 مرة.إذا كان يعلم أن الأسلوب سيكون تسمى 1000 مرة فقط أثناء بدء التشغيل VM (أعتقد شائعة طريقة مثل java.lang.String.equals(...) ) ، ثم انها مفيدة بالنسبة إلى متجر في AOT ذاكرة التخزين المؤقت بحيث أنه لا يجب أن نضيع الوقت في تجميع في وقت التشغيل.

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

إذا قمت بتضمين JVM وقت بدء التشغيل (التي هي مفيدة لقياس تجربة المستخدم ولكن ليست مفيدة جدا لتحسين كود جافا) ثم أنه قد يكون نظام ملفات التخزين المؤقت تأثير أو يمكن أن يكون سببه ميزة تسمى "الطبقة جافا تبادل البيانات":

الشمس:

http://java.sun.com/j2se/1.5.0/docs/guide/vm/class-data-sharing.html

هذا هو الخيار حيث JVM يحفظ استعداد صورة وقت التشغيل فصول ملف السماح أسرع التحميل (تقاسم) في بداية المقبل.يمكنك التحكم هذا مع Xshare:أو -Xshare:مع الشمس JVM.الافتراضي هو -Xshare:السيارات التي سيتم تحميل المشتركة فصول صورة إذا كان موجودا, و إذا لم يكن موجودا وسوف يكتب في أول بدء التشغيل إذا كان الدليل هو الكتابة على.

مع IBM جافا 5 هذا راجع للشغل أكثر قوة:

http://www.ibm.com/developerworks/java/library/j-ibmjava4/

أنا لا أعرف من أي تعميم JVM الذي هو إنقاذ JIT الإحصاءات.

الجافا JVM (في الواقع قد تغير من تطبيقات مختلفة من JVM) عندما بدأت لأول مرة تفسير رمز بايت.بمجرد أن يكتشف أن القانون سيتم تشغيل عدد كاف من المرات JITs إلى الأم لغة الآلة بحيث يتم تشغيله بشكل أسرع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top