java - 为什么简单的代码会加载很多类?

标签 java classloader

这是一个非常简单的代码:

package test;
public class Test {
    public static void main(String[] args) {
        System.out.println("test");
    }
}

我运行它:java -verbose:class Test,以下是输出。为什么要加载这么多类? Java不是根据需要加载类吗?

[Opened C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.Object from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.io.Serializable from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.Comparable from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.CharSequence from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.String from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.reflect.GenericDeclaration from C:\Program        Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.reflect.Type from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.reflect.AnnotatedElement from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.Class from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.Cloneable from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.ClassLoader from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.System from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.Throwable from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.Error from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
...
test
[Loaded java.lang.Shutdown from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]
[Loaded java.lang.Shutdown$Lock from C:\Program Files\Java\jdk1.7.0_11\jre\lib\rt.jar]

最佳答案

类本身可以以传递方式加载类。您的程序使用 System 类,该类本身可能引用 java.io.Serialized 等系统类。

您列表中的类也恰好是非常常用的类。可能只是虚拟机强制加载它们,以避免延迟初始化。这些类必然会在任何重要的程序中使用。

关于java - 为什么简单的代码会加载很多类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602698/

相关文章:

java - java类在内存中驻留的时间是多少

java - 如何根据输入值创建表名?

java - 根据 Selenium 中的字符串选择复选框

java - 井字游戏中无法访问的代码、if 语句?

java - hibernate.cfg.xml 已存在于我的项目中,但我收到此错误 hibernate.cfg.xml 未找到

java - 如何捕获静态初始化程序 block 中抛出的异常

java - 我的资源未加载 - "Input stream must not be null"

java - 从类中读取字节

java - 仅当字符串以连续 3 个数字开头时,正则表达式才匹配第一个数字

java - Spring PagingAndSortingRepository 在处理期间删除条目