JVM是否包含Java SE库二进制代码?内置类二进制是否已预置?
关于JVM与Java核心类库的疑问解答
你的观察是对的:使用第三方库时必须手动指定类路径引入jar包,但用Java核心类库(比如String)时完全不用额外操作,这背后的原因可以拆解为你的两个疑问来解释:
JVM是否包含Java SE库的二进制代码?
答案是不直接包含。JVM本身只是一个执行字节码的虚拟机,它并不自带Java SE核心类库的字节码。这些核心类库的字节码(.class文件)是打包在JRE(Java运行时环境)的核心模块或归档文件中的——比如Java 9及以后的模块化版本里,它们被放在java.base等系统模块中;而Java 8及更早版本则是打包在rt.jar这类核心jar包里。这是否意味着JDK内置类的二进制代码已预先存在于JVM中?
不是的。JDK内置类的字节码并没有直接嵌入JVM程序里,而是存储在JRE的专属文件/模块中。JVM在启动时,会自动把JRE核心类库的路径加入到类加载器的搜索路径里,类加载器会在需要的时候自动从这些默认路径加载核心类,所以不需要我们手动通过-cp或-classpath参数指定。
简单来说,JVM负责执行字节码,但核心类库的字节码是JRE提供的,JVM只是默认知道去哪里找它们,而第三方库不在这个默认搜索路径里,所以必须手动告诉JVM去哪里找。
内容的提问来源于stack exchange,提问作者RBS
相关产品推荐
相关产品推荐

