以详细模式运行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]
Run Code Online (Sandbox Code Playgroud)
什么是共享对象文件?我以为这些是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]
Run Code Online (Sandbox Code Playgroud)
在提取rt.jar之后的任何方式我发现它具有从共享对象文件加载的所有类.
这是类数据共享.运行Sun/Oracle客户端HotSpot和共享启用(-Xshare:auto默认情况下为或-Xshare:on)时,该classes.jsa文件是内存映射的.此文件包含classlist内部表示中的许多类(在文件中列出),适用于运行它的计算机的确切配置.这个想法是可以快速加载类,使JVM更快.很快就会遇到一个未被覆盖的类,并且rt.jar需要打开并根据需要按常规方式加载类.
参考: