Есть ли способ включить какое-то ведение журнала JVM, чтобы я мог видеть, что происходит во время загрузки классов и т. Д. - PullRequest
2 голосов
/ 17 марта 2010

Я пытаюсь оптимизировать время запуска / время загрузки моего веб-приложения на Java, потому что оно на Google App Engine и время запуска важно.

Есть ли способ, которым я могу включить какие-то отладочные сообщения при загрузке классов или как-то посмотреть, где время тратится во время загрузки классов? Я хочу посмотреть, не загружаются ли какие-то конкретные библиотеки, а затем избавиться от них, если они не являются необходимыми.

Ответы [ 2 ]

6 голосов
/ 17 марта 2010

Если вы хотите увидеть, какие классы были загружены и в каком порядке вы можете запускать с флагом -verbose.

Пример:

java -verbose:class <MyProgram>

Выход:

[Loaded java.lang.Object from shared objects file]
[Loaded java.io.Serializable from shared objects file]
[Loaded java.lang.Comparable from shared objects file]
[Loaded java.lang.CharSequence from shared objects file]
[Loaded java.lang.String from shared objects file]
[Loaded java.lang.reflect.GenericDeclaration from shared objects file]
[Loaded java.lang.reflect.Type from shared objects file]
[Loaded java.lang.reflect.AnnotatedElement from shared objects file]
[Loaded java.lang.Class from shared objects file]
[Loaded java.lang.Cloneable from shared objects file]
[Loaded java.lang.ClassLoader from shared objects file]
[Loaded java.lang.System from shared objects file]
[Loaded java.lang.Throwable from shared objects file]
[Loaded java.lang.Error from shared objects file]
..
..
..
0 голосов
/ 17 марта 2010

Добавление библиотеки в classpath не приведет к ее загрузке, между прочим, ни к одному классу. Классы обычно загружаются по мере необходимости (возможно, JVM будет предварительно загружать некоторые распространенные классы, но это обычно так далеко). Поэтому единственная реальная необходимость сократить количество классов / библиотек - это сокращение обслуживания (даже если оно не используется, вам придется отслеживать версии и т. Д.) И, возможно, время загрузки и размер развертывания.

Конечно, это могут быть важные факторы, но обычно они не влияют на производительность во время выполнения. Основным преимуществом регистрации загрузок классов является обнаружение, возможно, загружается неправильная версия класса и откуда, если вы получаете странные проблемы. Например, вы ожидаете, что класс будет загружен из библиотеки, которую вы явно включили, но вместо этого он загружается из каталога lib / ext, куда он был помещен каким-то недобросовестным сторонним приложением (Adobe имеет тенденцию помещать вещи туда, возможно, и другие, но это также может случиться с приложениями, работающими внутри серверов приложений, которые иногда получают общие классы от сервера приложений, что может конфликтовать с различными версиями тех же классов, распространяемых с приложением).

...