我对java比较陌生,所以如果这个问题看起来很“愚蠢”,请原谅我。我知道 JVM (Java )包含在JRE ()中,但我不确定类加载器和执行引擎是否是的一部分。
我读过的大多数资料来源都没有具体说明这一点。相反,在描述JVM的组件时,他们只讨论了运行时数据区域的5个组件(即堆、JVM堆栈、方法区域、PC寄存器和本机方法堆栈)。虽然我的常识告诉我们,要使它成为一个完整的虚拟机,它需要输入、内存和处理,但我仍然需要验证这些组件的确切位置。
发布于 2019-09-19 11:14:01
基于类加载器维基百科,JRE中有3种类型的类加载器:
这个类装入器是核心JVM的一部分,是用本机代码编写的。
它由sun.misc.Launcher$ExtClassLoader类实现。
这是由sun.misc.Launcher$AppClassLoader类实现的
因此,我认为结论是:第一个在中,另一个在JRE库中。
发布于 2019-09-19 12:46:08
我认为不可能作出明确的区分。
JRE是一种Java发行版的名称,(顺便说一句) Oracle不再提供它了。
JVM (Java虚拟机)是一个更抽象的术语。它指的是“执行Java程序的东西”。实际上,它由一个用本机代码编写的核心和大量的Java代码组成。但是,虚拟机与支持虚拟机的库和虚拟机运行的“Java的一部分”之间没有明确的界线。
java.lang.Classloader类就是一个很好的例子。其中一些是用Java编写的。其他部分是由JVM本机代码核心提供的本机代码方法。所有其他类装入器类都是extend ClassLoader。有些是标准库的一部分,另一些可能来自第三方库或框架,也可能由应用程序本身实现。
然后是引导类加载器,它完全用本机代码编写,并与ClassLoader的本机代码方法共享代码。
总之,我认为不可能得到一个明确的答案。我不认为试图或成功地在JVM周围划出一条硬线实际上会取得任何成果。
https://stackoverflow.com/questions/43273876
复制相似问题