1

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

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]
4

2 回答 2

0

在java中,一个类至少引用另一个类(称为Object)。JVM 识别这些引用(fe 扩展、返回类型、字段类型、实现)并加载引用的类。

在上面的例子中:

到 Java VM 在类未加载时加载它们

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

你的类是指:系统、对象、类、字符串、反射包中的一些类等等。

您在上面列出的这些课程。

于 2013-03-24T20:07:44.233 回答
0

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

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

于 2013-03-24T19:12:33.510 回答