经过深入分析,这是我对JDK,JRE和JVM的理解.如果我错了请纠正我...
你几乎就在那里.我只是建议如下:
JVM是JRE的子集,JRE是JDK的子集.
这很公平.JVM(Java Virtual Machinve)包含在JRE(Java运行时环境)中以运行字节码(.class文件).如果您下载整个JDK(Java开发工具包),其中还包括编译器等开发工具,则包含JRE.
JVM用于通过使用JRE将字节代码(*.class)转换为目标代码(机器代码).
基本上,是的.JVM执行字节码,此过程的一部分涉及将其转换为机器代码.您需要JDK将.java文件(源代码)编译为.class文件(字节码),以便可以在JVM上执行.
JRE具有操作系统(OS)指定DLL,JVM使用该字节代码进行对象代码转换.
JVM在执行字节代码时,具有JIT(即时)编译器,可将与平台无关的字节代码转换为特定于平台的机器代码.在Windows中,这将包含在DLL中,是的.JRE中还包括本机方法的特定于操作系统的实现,例如声明的方法java.lang.Object.
如果明天假设任何新操作系统将启动,则当前可用的JRE可能不支持JVM以获取字节代码以进行机器代码转换.因此,JRE可能需要增强对新即将推出的操作系统的支持.
是的,如果它是一个全新的操作系统,则需要JVM的本机实现.但是,您可以在这个新操作系统上编译OpenJDK.
因此,根据我的分析,我得出的结论是,JVM对于所有操作系统都是通用的,但JRE具有操作系统特定的DLL,JVM将在字节代码期间使用它来进行目标代码转换.
我不是说JVM对所有操作系统都是通用的,而是每个主流操作系统都有一个JRE(因此也就是JVM)实现.这些OS原生JVM将在执行与操作系统无关的Java字节代码时使用特定于操作系统的库.