我对java比较陌生,所以请原谅我这个问题看起来好像"愚蠢"。我知道 JVM (Java虚拟机)包含在 JRE (Java运行时环境)中但是我我不确定类加载器和执行引擎是否是JVM的一部分。
我读过的大多数消息都没有说明这一点。相反,在描述JVM的组件时,他们只讨论运行时数据区 的5个组件(即堆,JVM堆栈,方法区,PC寄存器和本机方法堆栈)。虽然我的常识告诉我,要成为一个完整的虚拟机,它需要输入,Memory&处理时,我仍然需要验证这些组件的确切位置。
答案 0 :(得分:1)
基于Classloader wikipedia,JRE中有3种类型的类加载器:
此类加载器是核心JVM的一部分,是用本机编写的 代码
由sun.misc.Launcher $ ExtClassLoader类实现
这由sun.misc.Launcher $ AppClassLoader类实现
因此,我的结论是:第一个在JVM中,另外两个在JRE库中。
答案 1 :(得分:1)
我认为不可能做出明确区分。
JRE是一种Java 发行版的名称,(偶然地)Oracle不再提供它。
JVM(Java虚拟机)是一个更抽象的术语。它指的是“执行Java程序的事物”。实际上,它由用本机代码和大量Java代码编写的核心组成。但是,在虚拟机与支持虚拟机的库以及虚拟机运行的“ Java的其他部分”之间没有明确的界限。
java.lang.Classloader
类就是一个很好的例子。其中一些是用Java编写的。其他部分是由JVM本地代码核心提供的本地代码方法。所有其他类加载器类extend
和ClassLoader
。有些是标准库的一部分,有些可能来自第三方库或框架,或者可以由应用程序本身实现。
然后有一个引导程序类加载器,它完全用本机代码编写,并与ClassLoader
的本机代码方法共享代码。
简而言之,我认为不可能获得明确的答案。而且,我认为尝试或成功地围绕JVM划清界限实际上不会取得任何成就。