java - Java线程执行单条指令是基于 native CPU还是字节码

标签 java multithreading assembly jvm jit

首先,我可能没有描述清楚问题,请发表评论,因为我对我所询问的案例了解有限

摘自 OCA/OCP Java® SE 7 程序员 I 和 II 学习指南

count++ statement into multiple Java bytecode instructions, you really have no control over what native instructions are executed. The JIT (Just In Time compiler)– based nature of most Java runtime environments means you don't know when or if the count++ statement will be translated to native CPU instructions and whether it ends up as a single instruction or several.

我的问题是,如果一条语句通过 JIT 翻译为 native CPU 指令,或者仍然在 java 字节码上,那么在多线程执行指令方面有什么不同吗?

我的印象是线程在 native CPU指令级别上工作,而不是字节码指令级别,因此即使JIT是否将方法转换为 native CPU指令,低级线程最终也会执行翻译后的字节码的 native CPU指令。 但如果这是真的,这意味着引用是错误的,因为最终线程将使用 native cpu 指令,除了 JIT 是否将该代码转换为 native cpu 之外,您能确认一下吗?

例如,如果 void example(){int c=0;c++;} 中的 c++ 语句在字节码上是 1 条指令,但在 native CPU 上是 3 条指令,并且 JIT 不会将方法示例转换为 native CPU 指令,并且线程 T 执行语句 c++,该语句将作为字节码指令(1 条指令)还是 native CPU(3 条指令)执行?

任何人都可以向我提供有关我所询问的主题的资源吗?

最佳答案

引用是正确的。您无法控制执行哪些 native 指令。架构和虚拟机类型有很多种,您无法确定所有这些。

对于您的特定情况的字节码,如果您好奇,可以尝试使用 -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly 和其他 Diagnostic flags一起玩。

关于java - Java线程执行单条指令是基于 native CPU还是字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39839590/

相关文章:

python - 工作线程内的 Queue.put 失败

c - 同步原语的简单/规范实现?

java - 当我们有多个 Activity 时如何集中运行时权限

Java - 如何检查来自同一抽象类的两个对象是否相等

c++ - 互斥条件信令循环如何工作?

iphone - iPhone OS是否可以区分前台线程和后台线程?

c - 复制BLAS矩阵乘法性能:我可以匹配它吗?

assembly - 哪种类型的汇编跳转指令最有用?

java - 需要帮助才能正确放置 Swing 组件

java - 如何使用流编写模式方法