Java相当于寄存器int?

时间:2009-02-11 20:58:44

标签: java c cpu-registers

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

register int i = 0;

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

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

我认为没有任何办法,但我之前一直很惊喜。

谢谢,

6 个答案:

答案 0 :(得分:18)

C中的

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;