在详细模式下运行jvm时,它显示正在从共享对象文件加载文件,如下所示
[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]
这是什么共享对象文件?我以为这些是rt.jar中的文件,它从那里开始加载;但是rt.jar在很长一段时间内被打开了
[Loaded java.security.BasicPermissionCollection from shared objects file]
[Opened C:\Program Files\Java\jre6\lib\rt.jar]
[Loaded sun.misc.JavaSecurityProtectionDomainAccess from C:\Program Files\Java\jre6\lib\rt.jar]
[Loaded java.security.ProtectionDomain$2 from C:\Program Files\Java\jre6\lib\rt.jar]
提取rt.jar之后的任何方式我发现它有从共享对象文件加载的所有类。
答案 0 :(得分:5)
这是类数据共享。运行Sun / Oracle客户端HotSpot并共享启用(-Xshare:auto
是默认值或-Xshare:on
)时,classes.jsa
文件是内存映射的。此文件包含许多类(在classlist
文件中列出)的内部表示形式,适用于运行它的计算机的确切配置。这个想法是可以快速加载类,使JVM更快。很快就会有一个未被覆盖的类,并且需要打开rt.jar
并按需要按常规方式加载类。
参考: