2010-03-16 68 views
1

我们的生产环境在每台Windows 2003服务器上运行3个32位Java 6 JVM。每个堆都处于最大设置(〜1.25GB)。我们正在考虑迁移到新服务器并使用64位JVM。据推测,我们可以在每台服务器上安装一个64位JVM,以替代每台服务器上的3个32位JVM,因为在使用64位JVM时允许有更大的堆大小。32位与64位JVM性能考虑事项?

任何人都这样做,并有任何经验教训?

我特别关注任何性能方面的考虑以及如何应对。

回答

1

由于在64位体系结构上寻址对象的代价更高,因此内存需求将会增加。实际上取决于您的应用程序有多少。假设你没有散列4GB的整数,猜测结果为10%-20%...

你也可能在锁定记录器,线程池,连接池,单例等的锁争用时遇到问题。如果您的应用程序是以数据库为中心的,那么这可能不是问题,但是如果您的应用程序在地图中存储了很多会话,并且访问了很多地图,则可能会出现问题。根据我的经验,“墙”的争论可能会很快。

但是,只有一种方法可以知道:...测试它。

+0

+1,试试看看。此外,从Java 6 update 14开始,可以使用“-XX:+ UseCompressedOops”为堆大小<32GB启用压缩对象指针,该指针应该消除由于64位对象指针造成的轻微内存增加,同时为您提供了64位JVM。 – 2010-03-20 17:31:49

0

我没有这样做,但只要您不依赖任何没有64位版本的32位JNI代码,这应该是完全正常的。如果你所使用的只是纯Java,那应该没有问题。