Как определить, какие классы используются программой на Java? - PullRequest
5 голосов
/ 24 января 2009

Существует ли какой-либо инструмент, который указывает, какие и когда некоторые классы эффективно используются приложением, или, что еще лучше, автоматически обрезает библиотеки JAR для предоставления только тех классов, на которые есть ссылки и которые используются?

Ответы [ 4 ]

9 голосов
/ 24 января 2009

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

  • на основе конфигурации XML (например, Spring);
  • загружено из файлов свойств (например, имя драйвера JDBC);
  • добавлено динамически с аннотациями;
  • загружен в результате внешнего ввода (например, пользовательский ввод, данные из базы данных или удаленный вызов процедуры);
  • и т.д.

Так что просто смотреть на исходный код недостаточно. При этом любая разумная IDE предоставит вам инструменты для анализа зависимостей. IntelliJ, безусловно, делает.

Что вам действительно нужно, так это инструментарий времени выполнения того, что делает ваше приложение, но даже это не гарантируется. В конце концов, из-за странной комбинации входных данных конкретный путь к коду может оказаться одним из 10 миллионов запусков, поэтому вы не можете быть уверены, что вы охвачены.

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

Лично я нахожу небольшое значение помимо того, что IDE скажет вам: удаление неиспользуемых JAR-файлов. Пройдя более гранулированно, чем просто напрашиваться на неприятности из-за небольшого выигрыша.

4 голосов
/ 24 января 2009

Да, вы хотите ProGuard . Это абсолютно бесплатная программа для сжатия и обфускатора Java-кода. Это легко настроить, быстро и эффективно.

3 голосов
/ 24 января 2009

Вы можете попробовать JarJar http://code.google.com/p/jarjar/

Обрезает зависимости jar.

0 голосов
/ 24 января 2009

В большинстве случаев вы можете сделать это довольно легко, просто используя javac.

Удалить существующие файлы классов. Позвоните в javac с названием ваших входных классов. Он скомпилирует те классы, которые необходимы, но не более. Работа выполнена.

...