2

在 C 编程中,为了在 CPU 寄存器中保留任何变量,我们使用register说明符。类似地在java中将一个对象保存在CPU缓存中,java中是否有一个说明符

4

4 回答 4

4

不。

Java 是一种高级语言(当然与 C 相比),因此不可能干预这些低级功能。

与 C 的另一个区别是 Java 需要一个 VM 才能运行,这个 VM 可能需要许多寄存器,并且不时变化。因此,不知道有多少和哪些寄存器可用,因此您可以“认领”一个。当然,由于每个 VM 的行为可能不同(内部),所以确实有办法。

于 2013-01-15T15:25:26.230 回答
4

在 Java(或标准 C AFAIK)中没有这样的控制对象是否在缓存中。您通常不需要register在 C 中给出提示来将值放入寄存器中,也不保证它将在寄存器中。

在 Java 中,JIT 确定哪些变量在寄存器中,CPU 确定哪些对象(或它们的一部分)在哪个缓存中(你可以有三个或更多)

你想解决什么样的问题?

顺便说一句:如果您尝试使 JIT 变得更聪明,那么您很可能会得到更慢的代码。

于 2013-01-15T15:27:03.317 回答
1

不,Java 编译器(应该...)会处理这个问题。现代编译器不再需要这样的人工提示(大多数时候......)。

于 2013-01-15T15:26:13.203 回答
0

Java 规范没有为程序员提供任何这样的特性。但是 JVM 仍然可以使用寄存器或其他内部内存位置进行优化。

但是 Java 确实提供了一个不在寄存器中缓存或存储值的特性。这是通过声明一个字段/数据成员volatile来完成的。

于 2013-01-15T15:30:12.713 回答