Подтвердить что ты не робот

Является ли "мертвый" код препятствием для работы приложений Java?

Я только что установил ненужный детектор кода для Eclipse и запускал его в моем проекте. Я вижу много так называемого "мертвого кода". Хотя, с организационной точки зрения, имеет смысл удалить мертвый/ненужный код, это заставило меня подумать:

Действительно ли мертвый код препятствует производительности Java-приложения?!?!

Для меня, если код действительно "мертв", он никогда не запускается, поэтому я не вижу, как его удаление (опять же, за исключением операций по организации/домашнему хозяйству/очистке кода) может когда-либо повысить производительность.

4b9b3361

Ответ 1

Это может повлиять на несколько вещей...

  • Размер приложения
  • Память, используемая при запуске приложения
  • Снижение производительности при сканировании пакетов (если применимо)

Ответ 2

Я не думаю, что "мертвый код" будет препятствовать производительности приложений, но это будет препятствовать производительности разработки, что неизменно дороже.

По возможности компилятор JIT может удалить этот мертвый код - см. удаление мертвого кода. Я полагаю, что теоретически, если компилятор JIT удаляет огромные количество мертвого кода, это может повлиять на компиляцию начальная.

Однако я сомневаюсь, что это произойдет на практике, и я бы рекомендовал только удаление мертвого кода, чтобы упростить/ускорить разработку.

Ответ 3

Это может немного повлиять на это, но компилятор JIT должен иметь возможность обнаруживать и исключать методы, которые никогда не используются. И даже если это не так, накладные расходы (память, время загрузки, время компиляции JIT и т.д.), Вероятно, будут небольшими.

Гораздо лучшей причиной для устранения мертвых методов является избавление от "старого материала", что делает вашу кодовую базу сложнее читать, тестировать, поддерживать. Если это код, который вам может понадобиться снова, вы всегда можете вернуть его из управления версиями.


Что делать, если я спрошу пользователя, какой метод вы хотите вызвать?, возьмите ввод как String, а затем вызовите этот метод, используя отражение?. JIT не может сказать, какой метод будет использоваться, поэтому он не может удалить какие-либо методы:).

Хорошая точка. Поэтому на практике это, вероятно, не устранит. (Но это могло бы... если classloader знал, где перезагрузить метод из...)

Мертвые методы увеличивают область метода в JVM.

Да, хотя процентное увеличение памяти, вероятно, невелико. И последующее снижение производительности, вероятно, еще менее значимо.

Также метод, который никогда не вызывается, никогда не будет скомпилирован JIT, поэтому вы, вероятно, не будете использовать 50% или более использования памяти для обычного метода live.

Слишком много мертвого кода приводит к выгрузке классов из области метода (кучи), что может повлиять на производительность приложения. я прав?.

Это маловероятно. Класс будет выгружен только в том случае, если ничто не ссылается на него и его загрузчик классов также недоступен. И если это произойдет, класс не будет использоваться снова в любом случае, поэтому правильно его выгрузить.

Ответ 4

Это может повлиять на производительность вашего приложения.

Edit

Один из способов взглянуть на это; мертвый код добавит дополнительную память в текущее приложение. Это также скажется на производительности приложений.