我很困惑,因为在JVM的角色。我的理解是正确的,JVM只将字节码转换为机器码?所以基本上,OS,JVM和CPU之间存在通信。我的假设是字节码被转换为机器码,然后由CPU处理。字节码是否必须转换为机器码?
回答
JVM
是一个虚拟机。
就像在VMware或VirtualBox上安装某些操作系统(Linux,Solaris)时那样,它们就是虚拟机。他们运行在主机操作系统之上。
JVM
是不同的,它的机器代码是bytecode
。有些机器具有高级语言作为他们的机器代码。如果JVM要在硬件上运行,而不在主机OS上运行,那么期望硬件能够使用bytecode
指令集。
但是,由于它在主机操作系统上运行,任何字节码指令在转换为机器码后都会传送到主机。在VMware/VirtualBox的情况下,这些软件会照顾它。在JVM的情况下,它由JRE
完成。
因此,每个字节码指令都转换为机器码?然后传达给OS和OS到CPU? – manojpotla
是的,但JVM不参与,它必须由包装环境完成,在这种情况下JRE。把它想象成运行批处理文件或shell脚本,批处理文件中的每条指令都是一个与字节码中的指令相当的指令。但是解释器必须根据批处理文件中的每条指令找到适当的程序来运行。 – 11thdimension
JAVA是一种编译和解释语言,不仅仅是解释型语言。让我们一步一步执行它的程序。
- 假设我们编写一个Java程序并将其保存为“hello.java”在硬盘上的某个文件夹中。
- java编译器的名称是“javac”。为了编译它,我们必须在命令行上编写“javac hello.java”。
- 在此阶段,高级代码被转换为机器级代码。 Java将它转换为一个.class文件作为“hello.class”。此代码也称为字节代码,因为此文件中的每条指令均为1个字节。
- 此字节码也可以在任何其他平台(如 Mac,Linux或Windows)上带走。对于其执行 ,它只需要相应操作系统的JVM。因此,JAVA被称为第一平台独立和体系结构中立的语言。
- 现在,为了执行它,使用了解释器。它本身被命名为“java”。对于它的解释,应该在命令行中使用“java hello.java”。它在内部调用类加载器,该加载器负责将硬盘中的'hello.class'文件加载到JVM的地址空间。
- 这里有一个'字节代码验证器',用于验证代码以避免运行时失败。在成功验证之后,JVM借助OS执行逐字节代码。
因此,整个Java程序由JVM和OS执行。虽然JVM充当Java程序的小型操作系统,但它仅在指令不在其范围内时才涉及OS。
- 1. 是否可以将LLVM字节码转换为Java字节码?
- 2. 如何将字节码转换为机器本机代码
- 3. 是否有可能将XML节点标记为“必须转换”?
- 4. 编码:TypeError:写入()参数必须是str,而不是字节
- 5. 字节码转换DEX
- 6. Python虚拟机(CPython)将字节码转换为机器语言吗?
- 7. Spark如何将字节码转换为机器码指令的运行时间转换?
- 8. 将组件转换为机器代码
- 9. 字节数组转换为ASCII字符串是乱码
- 10. TypeError:无法将字节转换为str,然后TypeError:write()参数必须是str,而不是字节
- 11. builtins.TypeError:必须是str,而不是字节
- 12. 当方法参数是字节时,为什么我必须将0转换为字节?
- 13. 将aspx代码转换为剃须刀
- 14. 在编译器将其转换为字节码之前,是否可以从jython中找到java源代码?
- 15. 将BCI(字节码索引)转换为源代码行号
- 16. 如何将Java源代码转换为字节代码?
- 17. 将汇编代码转换为机器代码
- 18. 将源代码转换为Java字节码的实用程序是什么
- 19. 参数必须是str字节
- 20. Struct.Error,必须是字节对象?
- 21. TypeError:文本必须是unicode或字节
- 22. HTTP请求标头是否必须是UTF-8编码?
- 23. 转换字节顺序的C代码?
- 24. 必须从原生的Android转换代码Xamarin的Android
- 25. 表格必须转换为System.Web.UI.Page
- 26. 为什么我必须转换变量?
- 27. 是否可以将tensorflow代码转换为theano代码?
- 28. 下面的代码是否将字符转换为其ASCII值?
- 29. 为什么你必须将一个字节的按位操作转换为Java中的一个字节?
- 30. 转换组件在C机器码++
我建议你阅读:https://en.wikipedia.org/wiki/Java_virtual_machine – PSo