在C中,我可以为变量分配一个寄存器,例如:
register int i = 0;
我知道Java是一种解释型语言,并且远离CPU有许多抽象。
是否有任何机制可用于甚至请求(如果架构不允许它,那么什么)我的变量保留在寄存器中而不是移动到缓存或主存储器?
我认为没有任何办法,但我之前一直很惊喜。
谢谢,
答案 0 :(得分:18)
register
不会将变量放入注册。它只是给编译器提示,将它放入寄存器可能会很好。
在Java中没有等价物。
答案 1 :(得分:6)
如果在短空间中使用它足以使它成为寄存器int是值得的,那么热点编译器应该能够自己解决这个问题。
事实上,热点编译器应该能够比C / C ++编译器做得更好,因为它有更多的信息可以使用。 C / C ++编译器必须猜测; HotSpot可以测量。
答案 2 :(得分:5)
Java中没有等价物。即使在C中,也不能保证变量将存储在寄存器中,编译器可以自由地忽略它。
在Java中,该方法将被解释,直到热点JIT启发式地确定需要编译它。对于编译代码,它使用着色算法为寄存器分配变量和临时值,或者在寄存器溢出的情况下写入/写入RAM。
答案 3 :(得分:3)
不,没有办法在Java中请求这个。但是,您可以执行一些操作来阻止使用寄存器,例如将volatile
修饰符应用于成员变量。
答案 4 :(得分:3)
我知道Java是一种解释 语言,很多很多 离开CPU的抽象。
你几乎回答了自己的问题: - )
但严重的是,一般来说,尽可能清楚简单地编写代码,JVM将尽其所能来正确处理您的代码。
答案 5 :(得分:0)
您可以创建一个名为@register的注释,但JVM肯定会忽略它。 e.g。
@register int i = 0;