كيف تعرف ما هي التحسينات التي تم تطبيق JVM على الكود الخاص بي؟

StackOverflow https://stackoverflow.com/questions/3669071

سؤال

تشتهر JVM (وخاصة النقطة الساخنة VM) بوجود عدد كبير من التحسينات التي يمكن أن تنطبق عليها في وقت التشغيل.

هل هناك طريقة للنظر إلى جزء معين من التعليمات البرمجية ومعرفة ما فعلته JVM بالفعل؟

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

المحلول

تتمثل إحدى المشكلات في أن "ما فعلته JVM فعليًا" يتغير بين الدعوات لأن JVM مجاني في إعادة ترتيب الكود.

على سبيل المثال ، قمت بالتحقيق قبل بضعة أيام ما الذي تفعله نقطة الساخنة مع final الأساليب مقارنة بالطرق الافتراضية. إذا حكمنا من قبل Microbencharks ، كانت استنتاجاتي:

  • العميل JVM: إذا كانت الطريقة هي على نحو فعال final (لا يوجد أي فئة محملة تتجاوزها) ، يستخدم JVM مكالمة غير قديمة. بعد ذلك ، إذا قمت بتحميل فئة تتجاوز هذه الطريقة ، فسيقوم JVM بتغيير رمز jit'ed لإجراء المكالمات الظاهرية. لذلك أعلن finalليس له صلة كبيرة.

  • خادم JVM: هنا final يبدو أنه ليس له صلة أيضًا. ما يبدو أنه يحدث هو أن JVM يولد دعوة غير افتراضية لأي فئة تستخدمها المرة الأولى, بشكل مستقل عن أي فصول يتم تحميلها. بعد ذلك ، إذا قمت بإجراء مكالمة من كائن من فئة أخرى ، فسيقوم JVM بتصحيح جميع المكالمات بشيء مشابه لهذا إنها في المرة الأولى):

    if (object instanceof ClassOfNonVirtualCall) {
        do non-virtual call to ClassOfNonVirtualCall.method
    } else {
        do virtual call to object.method
    }

إذا كنت مهتمًا حقًا برؤية التعليمات البرمجية المولدة ، فيمكنك اللعب مع Debug JVMs من OpenJDK:

http://dlc.sun.com.edgesuite.net/jdk7/binaries/index.html

http://wikis.sun.com/display/hotspotinternals/printassembly

نصائح أخرى

هذا محدد للغاية JVM ، وستحتاج على الأرجح إلى إجراء بعض التحقيقات الجادة في JVM المعينة التي تبحث عنها.

يمكنك رؤية خيارات Hotspot VM المتاحة هنا http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

ما يلي هو مورد جيد جدا:

http://wikis.sun.com/display/hotspotinternals/home

من المثير للاهتمام بشكل خاص روابط "Logompilation Tool" و "Logcompilation Overview" (لا يمكن نشر روابط مباشرة كما قمت بتسجيل للتو).

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

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