是否基于本机CPU或字节码执行单个指令的Java线程

时间:2016-10-03 20:07:58

标签: java multithreading assembly jvm jit

首先,我可能没有清楚地描述问题,请发表评论,因为我对我所询问的案例知之甚少

来自OCA /OCPJava®SE7程序员I& II学习指南

  将p ++ ++语句计入多个Java字节码指令,你真的   无法控制执行本机指令的内容。 JIT   (Just In Time编译器) - 基于大多数Java运行时的本质   环境意味着您不知道何时或是否计数++语句   将被转换为本机CPU指令以及它是否结束   作为一个或多个指令。

我的问题是,如果一个语句被JIT转换为本机CPU指令,或者在执行指令的多线程方面仍然在java字节码上,它会有所不同吗?

我的印象是线程工作在本机CPU指令级别,而不是字节码指令级别,所以即使JIT将方法转换为本机CPU指令,低级线程最终也会执行本机CPU指令翻译的字节码。 但如果这是真的,这意味着引用是错误的,因为最终线程将使用本机cpu指令,除非JIT将该代码转换为本机cpu,是否请您确认?

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

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

1 个答案:

答案 0 :(得分:0)

报价是对的。您无法控制执行本机指令的内容。有很多架构和虚拟机类型,你无法确定所有这些。

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