Raj*_*han 7 java interpreter jvm
我一直在弄清楚翻译的确切工作,搜索过并得出一些结论,只是希望能够让我更好地理解翻译工作的人来纠正它.
所以我所理解的是:
现在我仍然不清楚在...之间发生的子过程
还有一些问题:
Gra*_*ray 10
解释器是一种将代码从高级语言转换为机器格式的软件程序.
不,那是编译器.解释器是执行用语言编写的指令的计算机程序.见维基百科.这与将较高级语言转换为较低语言的编译器不同.C编译器从C转换为汇编代码,汇编程序(另一种编译器)从汇编代码转换为机器代码 - 现代C编译器执行从C到机器代码的两个步骤.
在Java中,java编译器执行代码验证并从源代码转换为字节码.它还执行许多小的处理任务,例如常量的预计算(如果可能),字符串的缓存等.
现在,java解释器的平台是运行它的JVM,所以基本上它将生成可以由JVM运行的代码.
JVM直接对字节码进行操作.Java解释器与JVM紧密集成,它们不应该被视为单独的实体.还发生了一些优化,其中字节码基本上是优化的(思考cc -O3)并且在运行中内联.这使得称它只是一个翻译不足.
所以它需要字节码产生中间代码和目标机器代码并将其提供给JVM.
JVM正在进行这些翻译.
JVM轮流在实现或运行JVM的OS平台上执行该代码.
我宁愿说JVM使用字节码,优化的用户代码,包含java和本机代码的java库,以及OS调用来执行java应用程序.
现在我仍然不清楚发生在两者之间的子过程,即1.解释器产生中间代码.2.然后优化解释的代码.3.然后生成目标代码4.最后执行.
不.Java编译器生成字节码.当JVM执行代码时,步骤2-4在JVM内部的运行时发生.它与C(例如)非常不同,后者由不同的实用程序运行这些单独的步骤.不要将此视为"子过程".
单独的解释器负责生成目标代码吗?并执行它?
是的,虽然在某些时候操作系统和CPU生效.
并且执行是否意味着它在JVM或底层操作系统中执行?
呃,它由JVM执行,在JVM中运行,作为OS内部的进程运行,CPU和其余的硬件架构负责执行机器代码.
Java应用程序有两个主要步骤:编译和运行时。每个过程具有完全不同的功能和目的。两者的主要过程概述如下:
[com.sun.tools.javac][1]通常在tools.jar文件中找到的文件通常在$ JAVA_HOME中-与java.jar相同的位置,等等。编译步骤:
[com.sun.tools.JCTree][3]。总体思路是每个表达式和每个语句都有一个Java对象。在这一点上,人们对每种代表的实际“类型”知之甚少。创建AST时唯一要检查的是文字语法1)解释器是一种将代码从高级语言转换为机器格式的软件程序.
不正确.解释程序是运行以某种语言表达的程序的程序,该程序不是计算机的本机机器代码.
有可能在此过程中,其中源语言被分析并翻译成中间语言步骤,但是这不是一个解释器的基本要求.在Java的情况下,字节码语言的设计使得既不需要解析也不需要不同的中间语言.
2)具体讲述java解释器,它以二进制格式获取代码(之前由java编译器从源代码翻译成字节码).
正确."二进制格式"是Java字节码.
3)现在java解释器的平台是运行它的JVM,所以基本上它将生成可以由JVM运行的代码.
不正确.字节码解释器是JVM的一部分.解释器不在JVM上运行.字节码解释器不会产生任何东西.它只运行字节码.
4)所以它需要字节码产生中间代码和目标机器代码并将其提供给JVM.
不正确.
5)JVM轮流在实现或运行JVM的OS平台上执行该代码.
不正确.
真实的故事是这样的:
1 - 典型的字节码解释器可以将抽象堆栈帧和对象布局映射到涉及特定于目标的大小和偏移的具体映射.但要称之为"中间代码"是一个延伸.解释器实际上只是增强了字节码.
| 归档时间: |
|
| 查看次数: |
3387 次 |
| 最近记录: |