2010-12-09 139 views
5

当运行在详细模式它显示文件的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之后的任何方式。

回答

5

这是类数据共享。运行Sun/Oracle Client HotSpot和共享启用(默认为-Xshare:auto-Xshare:on)时,classes.jsa文件为内存映射。该文件包含许多内部表示形式的类(列在classlist文件中),适用于运行它的机器的确切配置。这个想法是,类可以快速加载,使JVM更快。很快就会有一个未被覆盖的课程将被击中,rt.jar将需要打开并按需要按常规加载课程。

参考:

+0

这个答案可能需要举一些来源.... – Pacerier 2014-08-25 02:23:16