هل هناك أي سبب الأداء لإعلان معلمات الأسلوب النهائية في جافا؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

هل هناك أي سبب الأداء لإعلان معلمات الأسلوب النهائية في جافا؟

وكما هو الحال في:

public void foo(int bar) { ... }

ومقابل:

public void foo(final int bar) { ... }

وعلى افتراض أن bar للقراءة فقط ولا تعديل في foo().

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

المحلول

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

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

نصائح أخرى

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

والمترجمات التي تعمل بعد انتهاء اليوم الدراسي التحميل، مثل المجمعين JIT، يمكن الاستفادة من الأساليب النهائية. وبناء على ذلك، أعلنت وسائل النهائية يمكن أن يكون بعض الفوائد الأداء.

http://www.javaperformancetuning.com/tips/final.shtml

ويا وموردا جيدا آخر

http://mindprod.com/jgloss/final.html

واحد فقط نقطة أخرى أن إليها أعلاه أن استخدام المتغيرات المحلية غير النهائية المعلنة داخل-أسلوب مثيل الطبقة الداخلية قد تعمر إطار مكدس، لذلك المتغير المحلي قد تتلاشى بينما الكائن الداخلي لا يزال على قيد الحياة

وأفترض المترجم ربما يمكن إزالة جميع المتغيرات ثابتة خاصة النهائية التي تحتوي على نوع بدائي، مثل كثافة العمليات، ومضمنة بشكل مباشر في رمز تماما مثل مع ماكرو C ++.

ولكن، ليس لدي أي فكرة ما إذا كان هذا هو الحال في الممارسة العملية، ولكن يمكن القيام به من أجل إنقاذ بعض الذاكرة.

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