Chr*_*s B 15 java performance 64-bit jvm
最近我一直在对我公司的数据库产品的写入性能做一些基准测试,我发现只需切换到64位JVM就可以实现20-30%的一致性能提升.
我不允许详细介绍我们的产品,但基本上它是一个面向列的数据库,针对存储日志进行了优化.该基准测试涉及为其提供几千兆字节的原始日志,并计算分析它们并将其作为结构化数据存储在数据库中所需的时间.CPU和I/O的处理非常繁重,但很难说它的比例是多少.
关于设置的一些注意事项:
Processor: Xeon E5640 2.66GHz (4 core) x 2
RAM: 24GB
Disk: 7200rpm, no RAID
OS: RHEL 6 64bit
Filesystem: Ext4
JVMs: 1.6.0_21 (32bit), 1.6.0_23 (64bit)
Max heap size (-Xmx): 512 MB (for both 32bit and 64bit JVMs)
Run Code Online (Sandbox Code Playgroud)
两个JVM的常量:
为简单起见,我已经关闭了产品中的所有多线程选项,因此几乎所有处理都以单线程方式进行.(当我打开多线程时,当然系统变得更快,但32位和64位性能之间的比率保持不变.)
所以,我的问题是......为什么我在使用64位JVM时会看到20-30%的速度提升?以前有人见过类似的结果吗?
直到现在我的直觉如下:
64位指针更大,因此L1和L2缓存更容易溢出,因此64位JVM上的性能更差.
JVM使用一些花哨的指针压缩技巧来尽可能地缓解上述问题.在Sun网站的详细信息在这里.
在64位模式下运行时,允许JVM使用更多寄存器,这会略微加快速度.
鉴于以上三点,我预计64位性能会稍微慢一点,或大约等于32位JVM.
有任何想法吗?提前致谢.
编辑:澄清了有关基准环境的一些观点.
Luc*_*lis 10
来自:http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#64bit_performance
"一般来说,能够满足更大容量的内存配备了64位虚拟机一个小的性能损耗与运行在32位虚拟机在同一应用程序的好处.这是由于系统中的每一个原生指针占用8个字节,而不是4,这些额外的数据的加载,对内存的使用取决于有多少指针Java程序的执行过程中得到加载它转换为稍慢的执行产生影响.好消息是AMD64和EM64T那在64位模式下运行的平台,Java虚拟机得到了一些额外的寄存器,它可以用它来生成更高效的原生指令序列.这些额外的寄存器提高性能的地方经常会有任何性能损失都比较32时到64点比特执行速度.
当你转移到64位虚拟机时,将64位平台上运行的应用程序与SPARC上的32位平台相比,性能差异大约为10-20%.在AMD64上 d EM64T平台的差异范围为0-15%,具体取决于访问应用程序的指针数量."
不知道你的硬件,我只是采取一些疯狂的刺
strictfp.| 归档时间: |
|
| 查看次数: |
10333 次 |
| 最近记录: |