64位Java VM运行速度慢10倍

cra*_*rey 8 java macos 64-bit jvm jarbundler

我有一个使用JarBundler打包的Java应用程序.该应用程序相当CPU密集型(许多大型Collection.sort()调用).

在Mac OS上,当使用64位JavaApplicationStub时,应用程序运行缓慢且缓慢.此JavaApplicationStub文件正在启动Java 64位VM.

我找到了一个只有32位的旧JavaApplicationStub文件.我在Bundle中替换它,应用程序运行速度提高了10倍!(因此,在应用程序运行时使用32位VM).

这有意义吗?为什么64位虚拟机这么慢?构建应用程序并破解JavaApplicationStub文件是否有意义?

建议表示赞赏.

Joe*_*oel 5

请参阅此文章,了解运行64位JVM的优点/缺点.总而言之,指针解除引用和内存解除分配可能需要更长的时间 - 而且您正在移动更大的数据结构(即64位,而不是32位,这对您没有任何好处,除非您明确地使用它们).

另请参阅此相关文章,他们讨论了当移动到64位时性能降低高达85%,这与您遇到的情况一致:

性能下降的原因实际上与内存的增加有很大关系.Java封面下的内存引用增加了两倍,增加了WAS运行时和应用程序对象中内存结构的大小.不幸的是,处理器内存缓存大小并没有同时变大.这意味着更多的内存缓存未命中,这意味着处理更大内存的硬件工作更繁忙,这意味着更糟糕的应用程序性能.