首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从java代码到jvm字节代码的转换会考虑编译或转换吗?

从java代码到jvm字节代码的转换会考虑编译或转换吗?
EN

Stack Overflow用户
提问于 2020-05-26 05:46:03
回答 3查看 392关注 0票数 2

编译是将抽象的一个层次转换为较低层次的过程。同时,transpiling是一个从一个抽象级别转换到另一个抽象级别的过程,类似于将java代码转换为Kotlin/python。这就是我对这两个进程的理解。请有人解释一下java代码和jvm字节码。我的推论正确吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-26 06:00:41

从人类语言到机器语言的高级/低级抽象

编译器将从较高级别语言转换为较低级别语言。更高/更低是指机器语言的抽象程度。这将包括Java语言到字节码。字节码更接近机器语言,更远离人类语言。

转换程序在具有类似抽象级别的语言之间进行转换。从EcmaScript 6转换到EcmaScript 5以与旧的web浏览器兼容将是一个例子。从Java语言到Kotlin的转换将是另一种,或者将斯威夫特转换为Kotlin。

见维基百科:编译器

中间表示

特别是用Java编译的字节码语言和通过LLVM编译的bitcode (来自Swift,生锈被称为中间代表(IR) )。IR是为进一步处理、优化和翻译而设计的,在其成为机器语言的过程中。

票数 2
EN

Stack Overflow用户

发布于 2020-05-26 06:02:23

从java代码到jvm字节代码的转换会考虑编译或转换吗?

根据你在问题中给出的定义,它是在编译。字节码指令集的抽象级别低于Java源代码。

尽管如此,编译和转译之间的这种区别有点模糊,因为“抽象级别”没有明确的定义。

例如,有人可能会说,由于C有时被称为“高级汇编语言”,C++处于比C更高的抽象级别,这是否使C++ -> C转换编译?或者,它们是否处于相同的抽象级别,从而使C++ -> C转换转换溢出?这并不完全是学术性的,因为C++语言的第一个实现确实将C++转换为C源代码.IIRC。

票数 2
EN

Stack Overflow用户

发布于 2020-05-26 05:50:59

它的工作原理如下:

首先,java源代码由名为“Compiler”的翻译程序转换成字节码文件。字节码文件获得具有.class扩展的名称,javac (java编译器)是编译.java文件的工具。 然后, java是一种调用Java解释器“JVM”的工具。现在,JVM的工作开始了。当JVM调用时,

  1. JVM中名为类加载器(或系统类加载器)的子程序启动字节码并加载到OS内存(或RAM)中。
  2. 另一个子程序字节码验证器验证并确保代码不违反安全规则。这就是为什么java程序非常安全并且没有病毒的原因。
  3. 最后一个子程序执行引擎最终将字节码转换成机器代码。现在正在使用的那个引擎的名称是JIT,就在编译器中。

您可以在这里读到同样的内容:https://www.quora.com/How-does-the-Java-interpreter-JVM-convert-bytecode-into-machine-code

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62015417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档