这个帖子引起了这个问题。当运行如下所示的简单程序时
public class Sample { public static void main(String[] args) { } }
带有options -versbose:class
,它在加载该类之前列出了一堆类
[Opened C:\jdk1.6.0_14\jre\lib\rt.jar] [Loaded java.lang.Object from C:\jdk1.6.0_14\jre\lib\rt.jar] [Loaded java.io.Serializable from C:\jdk1.6.0_14\jre\lib\rt.jar] [Loaded java.lang.Comparable from C:\jdk1.6.0_14\jre\lib\rt.jar] . . . . . . [Loaded java.security.cert.Certificate from C:\jdk1.6.0_14\jre\lib\rt.jar] [Loaded Sample from file:/D:/tmp/] [Loaded java.lang.Shutdown from C:\jdk1.6.0_14\jre\lib\rt.jar] [Loaded java.lang.Shutdown$Lock from C:\jdk1.6.0_14\jre\lib\rt.jar]
我的问题是
我的计划从来不需要象类java.util.Collection
,Set
List
等等。那么为什么Bootstrap类加载器正在加载它们。这是JVM规范要求的方式还是Bootstrap类加载器如何确定要加载的类?
编辑:
另一个方面:
即使您尝试运行不存在的类,该程序也会以ClassNotFoundException
但并非没有加载前面提到的所有类结束。因此,仅在调用JVM时加载类!因此,JVM默认情况下会加载一组类,但是,什么决定了这种行为呢?