2009-02-11 27 views
7

在C,我可以分配一个寄存器变量,例如:Java相当于register int?

register int i = 0; 

我知道,Java是一种解释语言,并且是从CPU许多许多抽象的路程。

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

我不认为有什么办法,但我之前一直很惊喜。

谢谢

+1

C中的“寄存器”是完全无用的,至少已经有十年了。优化器不需要提示。 – 2009-02-11 21:08:18

+0

“解释型语言”。口译员是语言系统的一个属性,而不是语言。编译大部分(对于某些合适的定义)Java执行。 – 2009-02-11 21:19:34

回答

3

不,没有办法在Java中请求它。但是,有些事情可以阻止使用寄存器,例如将volatile修饰符应用于成员变量。

18

用C register不把一个变量来注册。它只是给了编译器一个提示,将它放入寄存器可能会很好。

在Java中没有等价物。

6

如果在一个很短的空间内使用足够的空间使其成为一个寄存器int值得,那么热点编译器应该能够自己弄清楚。

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

5

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

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

3

我知道,Java是一种解释 语言,是从CPU许多许多 抽象掉。

你几乎回答了你自己的问题有:-)

但严重的是,在一般情况下,编写代码的明明白白,你可以和JVM将竭尽所能来对待你的代码对。

0

您可以创建一个名为@register的注释,但JVM肯定会忽略它。 例如

@register int i = 0;