在C中,我可以为变量分配一个寄存器,例如:
register int i = 0;
我知道Java是一种解释型语言,并且有许多远离CPU的抽象.
是否有任何机制可用于甚至请求(如果架构不允许它,那么什么)我的变量保留在寄存器中而不是移动到缓存或主存储器?
我不认为有任何办法,但我以前都感到惊喜.
谢谢,
register
在C中没有输入变量来注册.它只是给编译器提示,将它放入寄存器可能会很好.
在Java中没有等价物.
如果它在短空间中使用足够使得它成为寄存器int是值得的,那么热点编译器应该能够自己解决这个问题.
实际上,热点编译器应该能够比C/C++编译器做得更好,因为它有更多的信息可以使用.C/C++编译器必须猜测; HotSpot可以测量.
在Java中没有等价物.即使在C中,也不能保证变量将存储在寄存器中,编译器可以自由地忽略它.
在Java中,该方法将被解释,直到热点JIT启发式地确定它需要被编译.对于编译代码,它使用着色算法为寄存器分配变量和临时值,或者在寄存器溢出的情况下向RAM写入/从RAM写入.