有没有办法打开某种JVM日志记录,所以我可以看到在类加载等过程中发生了什么

时间:2010-03-17 05:16:33

标签: java google-app-engine jvm classloader

我正在尝试优化我的Java Web应用程序的启动时间/类加载时间,因为它在Google App Engine和启动时间非常重要。

有没有办法可以打开某种类加载调试消息,或者某种方式来查看类加载时花费的时间?我想看看是否有任何特定的库需要一段时间才能加载,然后如果它们不是必需的话就去除它们。

2 个答案:

答案 0 :(得分:6)

如果您想查看已加载的类以及您可以使用-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]
..
..
..

答案 1 :(得分:0)

将类库添加到类路径不会导致它被加载btw,而不是任何一个类。 通常根据需要加载类(可能JVM会预加载一些常见的类,但通常就这样做)。 因此,减少类/库的数量的唯一真正需要是减少维护(即使它没有被使用,你将不得不跟踪版本等)以及可能的下载时间和部署大小。

当然,这些可能是重要因素,但通常不会影响运行时性能。 记录类加载的主要好处是检测是否正在加载类的不正确版本以及如果您遇到奇怪的问题从哪里加载。 例如,你期望从你明确包含的库中加载一个类,而不是从一个lib / ext目录加载它,它是由一些不道德的第三方应用程序放置的(Adobe倾向于把东西放在那里,也许其他人也可以,但也可能发生在appservers中运行的应用程序从appserver获取公共类有时可能与应用程序分发的那些相同类的不同版本冲突。