我一直在弄清楚口译员的确切工作方式,在谷歌上搜索了一下,得出了一些结论,只是希望有人能纠正一下,让我更好地了解口译员的工作。
所以我的理解是:
现在我仍然不清楚中间发生的子过程,即。
还有一些问题:
java应用程序有两个主要步骤:编译和运行时。每个过程都有非常不同的功能和目的。这两种方法的主要流程概述如下:
[com.sun.tools.javac][1]
执行。jar文件,通常位于您的$JAVA\u主页中,与JAVA位于同一位置。罐子等编译步骤:
[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平台上执行该代码。
不准确的
真正的故事是这样的:
典型的字节码解释器会将抽象堆栈帧和对象布局映射到涉及特定目标大小和偏移量的具体堆栈帧和对象布局。但将其称为“中间代码”是一种延伸。解释器实际上只是在增强字节码
解释器是一种将代码从高级语言转换为机器格式的软件程序。
不。那是编译器。解释器是直接执行用语言编写的指令的计算机程序。这与将高级语言转换为低级语言的编译器不同。C编译器从C到汇编代码,汇编器(另一种类型的编译器)从汇编转换为机器代码——现代C编译器执行从C到机器代码的两个步骤。
在Java中,Java编译器进行代码验证,并将Java源代码转换为字节码类文件。它还执行一些小的处理任务,例如常量的预计算(如果可能的话)、字符串的缓存等。。
现在java解释器的平台是JVM,它在其中运行,所以基本上它将生成可以由JVM运行的代码。
JVM直接对字节码进行操作。java解释器与JVM的集成非常紧密,因此不应将其视为单独的实体。目前正在进行的是大量的优化,字节码基本上是动态优化的。这使得仅仅称其为口译员是不够的。见下文。
因此,它将字节码生成中间代码和目标机器代码,并将其提供给JVM。
JVM正在进行这些翻译。
JVM依次在实现或运行JVM的OS平台上执行该代码。
我更愿意说,JVM使用字节码、优化的用户代码、包含java和本机代码的java库,以及操作系统调用来执行java应用程序。
现在我仍然不清楚中间发生的子过程,即1。解释器产生中间代码。2、然后优化解释代码。3、生成目标代码4。并最终执行。
Java编译器生成字节码。当JVM执行代码时,步骤2-4发生在JVM内部的运行时。它与C(例如)非常不同,C由不同的实用程序运行这些单独的步骤。不要将其视为“子进程”,而应将其视为JVM内部的模块。
那么解释器是否单独负责生成目标代码?并执行它?
算是吧。根据定义,JVM的解释器读取字节码并直接执行它。但是,在现代JVM中,解释器与即时编译器(JIT)协同工作以动态生成本机代码,以便JVM可以更有效地执行您的代码。
此外,还有后处理“编译”阶段,它在运行时分析生成的代码,以便可以通过内联常用的代码块和其他机制来优化本机代码。这就是JVM在启动时负载峰值如此之高的原因。它不仅加载在jar和类文件中,而且实际上正在动态执行cc-O3
。
执行意味着它在JVM或底层操作系统中执行吗?
虽然我们讨论的是执行代码的JVM,但这在技术上是不正确的。一旦字节码被转换为本机代码,JVM和java应用程序的执行就由CPU和其他硬件架构完成。
操作系统是执行所有流程和资源管理的基板,因此程序可以有效地共享硬件并有效地执行。操作系统还为应用程序提供API,以轻松访问磁盘、网络、内存和其他硬件和资源。
我写了下面的测试代码在Java使用ReentantReadWriteLock来了解公平和不公平模式之间的区别。然而,我看到在两种模式下,结果和输出总是相同的。它似乎总是在公平模式下工作。谁能解释一下,在何种情况下,公平和不公平模式会导致不同的行为? 输出总是: 当我将锁创建更改为公平模式时,上面的输出是我期望看到的: 对于非公平模式,我希望看到以下输出:
PyCharm包含解释器,可以根据需要创建具有新功能的新项目。 您可以根据需要在系统中创建虚拟环境。 您还可以在对话框中继承全局站点包。 Python包索引(PyPI)上提供了解释器,可以使用pip install.轻松安装和访问pip install. 创建口译员 对于创建解释器,始终建议创建一个管理所需配置的新项目。 请查看以下屏幕截图以获得更好的理解 - 这些参数包括 - 位置 - 这描述了
下述人员帮助我们编写了MySQL文档,并翻译了文档以及MySQL中的错误信息。 ·Paul DuBois 正在为本手册的正确性和可理解性提供帮助。包括改写了Monty和David的英文尝试,使其成为其他人理解的英语。 ·Kim Aldale 帮助改写了Monty和David的英文早期尝试,将其改写为英语。 ·Michael J. Miller Jr.<mke@terrapin.turbolift.
我在网上的某个地方发现这样一句话:“解释器是一个程序,它使用编程语言的基本指令集作为其机器语言来实现或模拟虚拟机。”在上述引用的上下文中,有人能解释一下解释器是如何实际完成高级指令的执行的吗?网上的教程只涉及抽象的方式,即一次只需要一行代码就可以执行。它是使用机器指令库还是如何使用?我很想知道这件事。
问题内容: 我无法确切地理解反射模式如何处理我的数组。我 有一个非常简单的数组: [[ 1. 1. 1. 1. 1.] [ 2. 2. 2. 2. 2.] [ 4. 4. 4. 4. 4.] [ 5. 5. 5. 5. 5.]] Applying a uniform (mean) filter with a window size of 3 I get the following: [[ 1.33
现在,随着杰克的宣布,谷歌澄清了Java与Android之间可预见的未来。但是这对Scala和其他基于JVM的语言开发人员有什么影响。特别是: Scala之所以如此神奇,是因为它有自己的编译器来生成Java字节码。但是Jack toolchain不处理字节码。生成的字节码会获得Jack处理的任何优化好处吗? 从Scala12开始,只支持Java8+。也就是说,生成的字节码也是Java8+。Jack