Oracle documentation将/jdk1.7.0/jre/lib/rt.jar描述为用于java运行时的引导类,我很好奇它们在运行JDK而不是JRE时是否加载过,以及if那么在运行时如何将这些替换为热点类呢?在jvm中加载java热点类
例如rt.jar似乎没有包含与hotspot/jdk/src/share/classes/java/util/Collections.java相对应的类,因此如果我将JDK6版本作为JDK添加到eclipse中,通过在调试器中执行以下操作:
Collections.emptySet().iterator();
我得到对应的rt.jar /代码这将创建一个新的迭代器实例java.util.Collections中,wheras热点版本从src.zip哪些池空迭代似乎并不存在。
我的理解一直是,热点代码将在运行前/运行期间链接,因此我怀疑我刚刚错过了位置,但是如果这不是真的,热点代码如何链接?
感谢您的详细信息,你没有说你在哪个版本的Java比较?我向你提供了Bootstrap Class Loader的参考资料,但由于我必须自己做研究才能完全回答我自己的问题,所以我已将其作为答案发布。 – MilesHampson 2015-02-09 10:28:48
我比较了那些有jdk8u25的本地文件 – Arkantos 2015-02-09 15:52:02