jvm - 什么是共享对象文件?

标签 jvm java

当以详细模式运行 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 后,我发现它包含从共享对象文件加载的所有类。

最佳答案

这是类数据共享。运行 Sun/Oracle Client HotSpot 并启用共享时(默认的 -Xshare:auto-Xshare:on),classes.jsa 文件是内存映射的。该文件包含许多内部表示的类(在 classlist 文件中列出)适合运行它的机器的精确配置。这个想法是可以快速加载类,从而更快地启动 JVM。很快就会遇到未涵盖的类,并且需要打开 rt.jar 并根据需要按常规方式加载类。

引用:

关于jvm - 什么是共享对象文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4393940/

相关文章:

java - 尝试使用 Eclipse 制作我的第一个应用程序时出错

java - 让 Class.getResource() 使用当前 ThreadContext 类加载器的最简单方法

java - 从数据库中删除一个简单的行

java - Jersey 客户端 REST API 生成 http 403 错误

java - 在Struts2中迭代时如何访问作为Hashset的对象的属性值

java - 在JAVA中创建多个JVM(VMM)

java - JVM 数组可以被 realloc() 吗?

java - Java中前缀和后缀++运算符的区别

ubuntu - Grails 无法在 Ubuntu 上运行

java - 在批处理文件中传递带有空格的 JVM 参数