gpt4 book ai didi

java - jvm中java热点类的加载

转载 作者:行者123 更新时间:2023-12-01 11:57:12 25 4
gpt4 key购买 nike

甲骨文documentation将/jdk1.7.0/jre/lib/rt.jar 描述为 java 运行时的引导类,我很好奇这些是否在运行 JDK 而不是 JRE 时加载,如果是的话,如何在运行时将它们替换为热点类?

例如rt.jar似乎不包含与hotspot/jdk/src/share/classes/java/util/Collections.java对应的类,所以如果我将JDK6版本作为JDK添加到eclipse中并单步执行调试器中的以下内容:

Collections.emptySet().iterator();

我得到了与 rt.jar/java.util.Collections 相对应的代码,它创建了一个新的迭代器实例,而来自 src.zip 的热点版本(它池化了一个空迭代器)似乎不存在。

我的理解一直是热点代码将是在运行时之前/期间链接的内容,因此我怀疑我刚刚错过了该位置,但如果这不是真的,那么热点代码如何链接?

最佳答案

所有Java程序都需要JRE才能运行。甚至 JDK 中也有一个子文件夹 jre 。 JDK是供开发人员编写、编译、配置java程序的。 java.langjava.util 中的所有类都存在于 rt.jar(运行时的快捷方式)中,它将在 Bootstrap 执行的每个 java 程序中加载类加载器。

src.zip 是 Java SE API 的源代码,它不包括热点源代码/VM 代码和其他一些用 C/C++ 编写的东西,但它可供所有人下载。

我刚刚比较了 JAVA_HOME/src.zipJAVA_HOME/jre/lib 中的 java.util.Collections.emptySet().iterator()/rt.jar 发现它们是相同的。

关于java - jvm中java热点类的加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28361707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com