在这里读书的时候。
我可以看到以下部分:
32位还是64位?如果您具有32位操作系统,则必须使用32位版本的JVM。如果您使用的是64位操作系统,则可以选择使用32位或64位版本的Java。不要仅仅因为拥有64位操作系统就必须假定您还必须使用Java 64位版本。
如果堆的大小小于3 GB,则Java的32位版本将更快并且占用空间更小。这是因为JVM中的内存引用只有32位,并且处理这些内存引用比处理64位引用(即使您具有64位CPU)要便宜。32位引用也使用更少的内存。
第8章讨论了压缩的操作,这是JVM甚至可以在64位JVM中使用32位地址的一种方式。但是,即使进行了这种优化,由于使用的本机代码仍将具有64位地址,因此64位JVM将具有更大的占用空间。
32位JVM的缺点是总进程大小必须小于4GB(在某些Windows版本上为3GB,在某些旧版本的Linux上为3.5GB)。其中包括堆,permgen,JVM使用的本机代码和本机内存。在32位JVM上大量使用长或双变量的程序会变慢,因为它们不能使用CPU的64位寄存器,尽管这是非常特殊的情况。
在32位JVM中,适合32位地址空间的程序将比类似配置的64位JVM快5%至20%。例如,本章前面讨论的库存批处理程序在我的桌面上的32位JVM上运行时,速度提高了20%。
这两行说,对于较小的堆大小(小于3GB),32位将更快。如果是这样,我想知道其背后的原因,是什么使32位JVM更快?
这更多地取决于总体性能。如果您拥有最新的64位处理器和大量未使用的内存,那么使用JVM 32而不是JVM 64唯一可能获得的收益是某些循环可以完全适合32位地址而不是64位地址的缓存,从而导致主内存更少使用32位JVM访问。我真的无法评估增益,但是除了非常特殊的情况外,我怀疑它会达到5%到20%-注意,我只是怀疑,不确定...
但是,如果您使用的是资源有限的系统,则最终由于要优化硬件并在其上运行许多虚拟机,使用32位JVM将比使用64位JVM占用更少的内存。它将为其他应用程序和系统留下更多的可用内存,从而避免了交换并允许系统更好地缓存磁盘IO。
恕我直言,没有一般规则。我将使用以下经验法则:如果当JVM和所有其他应用程序正在运行时,系统仍具有足够的内存来缓存IO,则我将使用64位JVM,反之则使用32位JVM。
当然,只有Java应用程序本身不需要大量内存来强加使用64位JVM的情况才具有上述意义-最终会在必要时向系统添加更多内存,因为如今内存并不那么昂贵
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句