我读到,java源代码被编译成“字节码”,然后通过JIT再次“编译”成“机器码”。也就是说,源代码首先编译成独立于平台的字节码,然后再次编译成特定于机器的代码。那么为什么它同时被称为解释语言和编译语言呢?解释发生在哪里?
为了精确起见,让我们明确这不是一个Java编程语言问题,而是一个JVM特性。
在JVM的第一个实现中,JIT不存在,字节码总是被解释。这是由于设计决策使编译的代码独立于运行java的物理机器和操作系统,并且今天仍然有效。
作为后来的改进,JIT被引入JVM实现以加快执行速度,但字节码必须仍然有效并在转换为二进制之前通过所有验证。这样,您就可以保持平台独立性、所有健全性和安全性检查,并获得性能。
它有一个规范(JLS)来定义Java程序应该如何运行。
作为一种语言本身,它没有指定如何在不同的平台上执行。无论是否使用JIT,它的运行方式都完全基于实现。
>
如果我明天编写一个根本不进行JIT编译的Java运行时,我可以调用Java解释。
如果我使用一台使用Java字节码作为汇编的Java机器(人们认真制作了),我可以称之为Java严格编译。
许多其他语言都可以做到这一点:
这里有一点误解。
在正常情况下,java编译器(java编译器)将java代码编译成字节码,java解释器(java解释器)解释这些字节码(逐行),将其转换为机器语言并执行。
JIT(准时制)编译器是一个有点不同的概念。JVM维护函数的执行次数。如果超过了限制,那么JIT就会出现。java代码直接编译成机器语言,并在此基础上执行该函数。
问题内容: 过去,我使用C 作为编程语言。我知道用C 编写的代码会经过编译过程,直到成为目标代码“机器代码”为止。 我想知道Java在这方面如何工作。用户编写的Java代码如何由计算机运行? 问题答案: Java实现通常使用两步编译过程。Java编译器将Java源代码编译为字节码。字节码由Java虚拟机(JVM)执行。现代JVM使用称为即时(JIT)编译的技术将字节码编译为硬件CPU在运行时即时理
问题内容: 我正在尝试更好地理解它们之间的区别。我在网上找到了很多解释,但它们倾向于抽象的差异,而不是实际的含义。 我的大部分编程经验都来自CPython(动态的,解释的)和Java(静态的,编译的)。但是,我知道还有其他种类的解释和编译语言。除了可以从以编译语言编写的程序中分发可执行文件这一事实之外,每种类型是否有优点/缺点?通常,我听到人们争辩说解释语言可以交互使用,但是我相信编译语言也可以具
问题内容: 在阅读了有关该主题的一些资料之后,我仍然不确定编译语言和解释语言之间的区别。有人告诉我这是Java和JavaScript之间的区别之一。有人能帮我理解吗? 问题答案: 编译语言和解释语言之间有什么区别? 区别 不 在于语言。它在 执行中 。 从我的系统中得到了答案,这是一个答案: 在编译的实现中,原始程序被转换为本地机器指令,这些指令直接由硬件执行。 在解释的实现中,原始程序被翻译成其
据我所知,JIT将字节码编译成运行速度更快的本机代码。因此,根据我的信念,我的问题的答案应该是1。翻译成机器代码2。解释字节码。因为解释代码意味着执行代码。但我发现答案恰恰相反!谁能解释一下。。。提前感谢
问题内容: 我正在尝试更好地理解它们之间的区别。我在网上找到了很多解释,但是它们倾向于抽象的差异,而不是实际的含义。 我的大部分编程经验都来自CPython(动态的,解释的)和Java(静态的,编译的)。但是,我知道还有其他种类的解释和编译语言。除了可以从以编译语言编写的程序中分发可执行文件这一事实之外,每种类型是否有优点/缺点?通常,我听到人们争辩说解释语言可以交互使用,但是我相信编译语言也可以
翻译的结果是什么?它会把高级语言变成汇编语言还是机器语言,即二进制代码? 如果是后者,这是否意味着解释语言与介绍集没有关系? 一种语言只能有一个口译员?是因为解释器不做任何优化,所以我们不需要找到更好的解释器吗?