public class Sample
{
public static void main(String[] args)
{
}
}
Run Code Online (Sandbox Code Playgroud)
带有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]
Run Code Online (Sandbox Code Playgroud)
我的问题是
我的计划从来不需要象类java.util.Collection,Set List等等。那么为什么Bootstrap类加载器正在加载它们。这是JVM规范要求的方式还是Bootstrap类加载器如何确定要加载的类?
编辑:
另一个方面:
即使您尝试运行不存在的类,该程序也会以ClassNotFoundException但并非没有加载前面提到的所有类结束。因此,仅在调用JVM时加载类!因此,JVM默认情况下会加载一组类,但是,什么决定了这种行为呢?
Class是包的一部分java.lang,因此引导类加载器会选择它来加载,但Class它本身需要一些依赖的框架类,例如List或Set,因此它们也会被加载。
如果您在 JDK 中看到代码,Class您会发现以下导入
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.Map;
import java.util.HashMap;
Run Code Online (Sandbox Code Playgroud)
Classsource 内部使用了Collections,所以需要加载。
| 归档时间: |
|
| 查看次数: |
2142 次 |
| 最近记录: |