JVM 为 32 位还是 64 位?
在这里阅读这本书时。
我可以看到以下部分,其中说:
32 位还是 64 位?如果您使用的是 32 位操作系统,那么必须使用 32 位版本的 JVM。如果您使用的是 64 位操作系统,则可以选择使用 32 位或 64 位版本的 Java。不要以为仅仅因为您有一个 64 位操作系统,你还必须使用 64 位版本的 Java。
如果堆的大小小于大约 3 GB,则 32 位版本的 Java 将更快,占用空间更小。这是因为 JVM 中的内存引用只有 32 位,并且操作这些内存引用比操作 64 位引用(即使您有 64 位 CPU)便宜。32 位引用也使用较少的内存。
第8章讨论了压缩的oops,这是JVM即使在64位JVM中也可以使用32位地址的一种方式。但是,即使进行了这种优化,64 位 JVM 也将具有更大的占用空间,因为它使用的本机代码仍将具有 64 位地址。
32位JVM的缺点是总进程大小必须小于4GB(在某些版本的Windows上为3GB,在某些旧版本的Linux上为3.5GB)。这包括堆、permgen 以及 JVM 使用的本机代码和本机内存。在32位JVM上广泛使用长变量或双变量的程序会变慢,因为它们不能使用CPU的64位寄存器,尽管这是一个非常特殊的情况。
适合 32 位地址空间的程序在 32 位 JVM 中的运行速度比类似配置的 64 位 JVM 快 5% 到 20%。例如,本章前面讨论的库存批处理程序在桌面上的 32 位 JVM 上运行时速度提高了 20%。
这些行说32位对于较小的堆大小(小于3GB)将更快。如果这是真的,我想知道它背后的原因,是什么让32位JVM更快?