Чи є якісь причини ефективності, щоб оголосити параметри методу остаточними на Java?
А саме:
public void foo(int bar) { ... }
Проти:
public void foo(final int bar) { ... }
Якщо припустимо, що barвін читається і ніколи не змінюється foo().
Чи є якісь причини ефективності, щоб оголосити параметри методу остаточними на Java?
А саме:
public void foo(int bar) { ... }
Проти:
public void foo(final int bar) { ... }
Якщо припустимо, що barвін читається і ніколи не змінюється foo().
Відповіді:
Кінцеве ключове слово не відображається у файлі класу для локальних змінних та параметрів, тому воно не може вплинути на продуктивність виконання. Це лише використання для уточнення намірів кодерів, що змінна не повинна бути змінена (що багато хто вважає сумнівною причиною її використання), а також стосунки з анонімними внутрішніми класами.
Існує чимало аргументів щодо того, чи має остаточний модифікатор методу якийсь приріст продуктивності, оскільки методи будуть накреслені оптимізуючим компілятором під час виконання, незалежно від модифікатора. У цьому випадку його також слід використовувати лише для обмеження перевищення методу.
Єдиною перевагою остаточного параметра є те, що він може бути використаний в анонімних вкладених класах. Якщо параметр ніколи не змінюється, компілятор вже виявить, що це частина його нормальної роботи навіть без остаточного модифікатора. Досить рідко буває, що помилки викликаються несподівано призначеним параметром - якщо ваші методи досить великі, щоб потребувати цього рівня техніки, зробіть їх меншими - методи, які ви викликаєте, не можуть змінити ваші параметри.
Компілятори, які працюють після завантаження класу, наприклад компілятори JIT, можуть скористатися кінцевими методами. Отже, методи, оголошені остаточними, можуть мати певну користь.
http://www.javaperformancetuning.com/tips/final.shtml
О та ще один хороший ресурс
Я припускаю, що компілятор, можливо, може видалити всі приватні статичні кінцеві змінні, які мають примітивний тип, наприклад, int, та вбудувати їх безпосередньо в код, як і макрос C ++.
Однак у мене немає поняття, якщо це робиться на практиці, але це можна зробити для того, щоб зберегти трохи пам’яті.