当前位置: 首页 > 面试题库 >

解释字节码与编译字节码?

萧晔
2023-03-14
问题内容

我遇到了一些有关JVM /
JIT活动的参考,其中似乎在编译字节码和解释字节码之间有区别。该特定注释声明的字节码在前10000次运行时进行解释,然后进行编译。

“编译”和“解释”字节码之间有什么区别?


问题答案:

解释字节码基本上是逐行读取字节码,不进行任何优化或任何操作,然后对其进行解析并实时执行。由于许多原因,这种方法效率低下,其中包括Java字节码设计得不能快速解释的问题。

编译方法时,JIT会加载整个方法并生成直接在CPU上运行的本机代码,而不是逐行读取和解释字节码。编译该方法一次之后,每次调用该方法时都会直接使用生成的本机代码。这在天文速度上更快,但是在编译该方法时会产生一些开销。除其他外,JVM仅负责编译经常调用的方法,以最大程度地减少开销,同时最大程度地提高被频繁调用的“紧密内循环”代码的性能



 类似资料:
  • 导航 目录 上一章:Lua 与 C/C++ 交互 下一章:LuaJIT 介绍

  • 字节码的解释执行和AST的解释执行有类似之处,而且更简单,因为树形结构已经展开成顺序了,以栈虚拟机为例,为方便起见,假设所有的指令都在一个指令数组里,每个元素是一个指令对象,有code和arg两个属性,解释器入口: Object execute(Inst[] inst_list, Object[] func_arg); 由于continue和break已经被jmp指令代替了,这里我们认为exec

  • 我们正在使用一个包含用JAXB注释的bean的库。我们使用这些类的方式并不依赖于JAXB。换句话说,我们不需要JAXB,也不依赖于注释。 然而,由于注释的存在,它们最终会被处理注释的其他类引用。这要求我在应用程序中绑定JAXB,这是不允许的,因为JAXB在

  • 问题内容: 如果我有一个字节变量: 为什么以下工作: …但这不是吗? 编译器第一理解为第二吗? [编辑] 我知道演员,但我想提请您注意 我认为它们是平等的,那么为什么编译器会有所不同呢?之间有什么区别 问题答案: 因为是的等效项,而的类型被提升为(JLS§5.6.2二进制数值提升),因此,如果不进行显式转换,则不能将其结果分配给它。 根据JLS,§15.26.2复合赋值运算符: 形式为E1 op

  • 问题内容: 我目前正在翻译中编写一个针对Java字节码的玩具编译器。 我想知道是否可以在编写.class文件之前在发出的字节码中进行各种简单的窥孔优化的目录,也许是摘要。我实际上知道一些具有此功能的库,但是我想自己实现。 问题答案: 您知道Proguard吗?http://proguard.sourceforge.net/ 这是一个很棒的字节码优化器,它实现了很多优化。请参阅常见问题解答以获取列表

  • 问题内容: 在CPython的上下文中,我并没有真正理解“字节码解释器”的概念。有人可以说明整个情况吗? 这是否意味着CPython将编译并执行pyc文件(字节码文件?)。那么什么将py文件编译为pyc文件呢?而且Jython与CPython有何不同(除了它们以不同的语言实现)。 我还在某处读到Python是C ++的解释。这个对吗?那是什么意思呢? 我对Python还是很陌生,所以请原谅我这个愚