Java相当于寄存器int?

ele*_*n81 7 c java cpu-registers

在C中,我可以为变量分配一个寄存器,例如:

register int i = 0;
Run Code Online (Sandbox Code Playgroud)

我知道Java是一种解释型语言,并且有许多远离CPU的抽象.

是否有任何机制可用于甚至请求(如果架构不允许它,那么什么)我的变量保留在寄存器中而不是移动到缓存或主存储器?

我不认为有任何办法,但我以前都感到惊喜.

谢谢,

Joh*_*iss 18

register在C中没有输入变量来注册.它只是给编译器提示,将它放入寄存器可能会很好.

在Java中没有等价物.


Mic*_*ers 6

如果它在短空间中使用足够使得它成为寄存器int是值得的,那么热点编译器应该能够自己解决这个问题.

实际上,热点编译器应该能够比C/C++编译器做得更好,因为它有更多的信息可以使用.C/C++编译器必须猜测; HotSpot可以测量.


sk.*_*sk. 5

在Java中没有等价物.即使在C中,也不能保证变量将存储在寄存器中,编译器可以自由地忽略它.

在Java中,该方法将被解释,直到热点JIT启发式地确定它需要被编译.对于编译代码,它使用着色算法为寄存器分配变量和临时值,或者在寄存器溢出的情况下向RAM写入/从RAM写入.


eri*_*son 3

不,在 Java 中没有办法请求这个。但是,您可以执行一些操作来阻止使用寄存器,例如将修饰符应用于volatile成员变量。