Чи впливає невикористаний імпорт та об’єкти на ефективність


75

Я сумніваюся, чи впливають невикористані імпорти та невикористані об’єкти в коді Java на якість впливу?

Припустимо, що об’єкт ініціалізований і ніколи не використовується, що відбувається? А яка вартість невикористаного імпорту?



Чому б не використовувати Organize Importsфункцію Eclipse ?
juergen d

Або організуйте імпорт в IntelliJ або NetBeans або будь-яку гідну IDE.
Пітер Лорі

1
Це впливає на управління кодом точно :)
розлад

Відповіді:


69

Це дуже поширене питання.

Як і більшість питань щодо продуктивності, найкращим підходом є написання максимально чіткого та простого коду, оскільки це покращує ремонтопридатність коду та допомагає забезпечити його достатню ефективність навіть після його зміни. (Розумний / тупий / непотрібний багатослівний код для початку може працювати швидко, але оскільки його змінюють прості смертні, він може ставати набагато повільнішим)

Невикористаний імпорт має незначний вплив на компілятор, але його немає в байтовому коді або під час виконання.

Невикористані об’єкти можна оптимізувати, але їх найкраще уникати, оскільки вони майже завжди спричиняють певний вплив на продуктивність, але, що важливіше, ускладнюють читання та підтримку коду.


1
Ми також можемо згадати кілька додаткових галочок процесора в процесі компіляції. Більше коду - більше часу потрібно для оптимізації та компіляції
розлад

Дякую за відповідь! Чи є у вас джерело цієї інформації, на яке я можу посилатися? (крім цієї відповіді ...)
Едуардо Безерра

2
@EduardoBezerra ви бачите із специфікації байтового cide, що імпорт не використовується, тому він може мати ефект під час виконання.
Peter Lawrey

24

Невикористаний імпорт не впливає на продуктивність під час виконання. Це суто механізм простору імен. Тим не менше, вам завжди слід імпортувати лише те, що вам потрібно для читабельності, і уникати зіткнень простору імен, які становлять неприємність.

Окрім читабельності коду та, отже, ремонтопридатності коду, може бути швидша компіляція Java-коду (однак, непомітна) шляхом впорядкування імпорту, але продуктивність виконання це не впливає, оскільки на байтовий код не впливає неохайний імпорт. Створений байт-код залишається незмінним.


3
Будь ласка, надайте посилання наunused imports have no performance impact
RanRag

3
Якщо бути точнішим, у RUNTIME це не впливає на продуктивність. Однак, залежно від кількості імпорту, СКЛАДАННЯ може бути повільнішим, проте непомітним.
Frankline

Чому непомітно? Звичайно, це залежить від того, скільки компіляцій ви робите? Наприклад - у нас є сервер збірки CI, який постійно компілює кілька проектів - тому навіть найменша оптимізація повинна трохи підвищити продуктивність компіляції, так?
Райан

Якщо щось займає добу довше, ніж зазвичай, ви це помітите ... припускаючи, що це зазвичай займає менше кількох днів. Що робити, якщо це зазвичай тривало рік? Ви цього не помітите, бо це просто шум такої величини. Є більше корисних речей, на яких слід зосередитися, ніж підвищення ефективності на 0,274%. Якщо вам дійсно потрібно це невелике збільшення, кинути на нього краще апаратне забезпечення або вдосконалити компілятор, ви отримаєте набагато більше від цього, аніж після зміни кишені.
Чіното Вокро

@SantiBailors з чого "один цілий день"? Цей день проводить комп’ютер, а не ви. Комп’ютер не може виправити помилки (якщо на них не запрограмовано?), Інакше ви б не потрібні. Зміна, яка отримує 1/1000 у циклі 1000 ітерацій, все ще залишається лише посиленням 1/1000, я не бачу вашої точки зору. Якщо хтось хоче заплатити вам за такий невеликий виграш, це для вас чудово, інакше це марна трата часу.
Чіното Вокро

8

Хоча вплив на компіляцію мінімальний, вплив на розгортання може бути поганим. Я щойно натрапив на невикористаний імпорт, який вимагав окремої бібліотеки, яка стала залежністю maven. Подальшої проблеми перехідної залежності, на щастя, не знайшли, але .warфайл був товстішим без причини. Додайте до цього зайву банку в завантажувачі класів webapp.


1

Незважаючи на те, що невикористаний імпорт у файлі Java не завдає шкоди, він без потреби збільшує довжину та розмір вихідного файлу Java.


0

Так, це трохи впливає на продуктивність, якщо ми посилаємось на невикористаний оператор імпорту в нашому класі Java. Компілятор Java перевірить наявність посилань, згаданих в операторі імпорту, і на хвилинному рівні це вплине на ефективність вашого класу.

Дякую

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.