我们公司计划迁移到64位JVM,以便远离2 GB的最大堆大小限制.Google给出了关于64位JVM性能的非常好的结果.有没有人尝试过64位Java并分享你的经验
简而言之: 64位JVM将消耗更多内存用于对象引用和一些其他类型(通常不重要),每个线程消耗更多内存(通常在高容量站点上很重要)并使您拥有更大的堆(通常只有如果你有很多长寿命的物体很重要)
更长的答案/评论:
Java是32位设计的评论是误导性的.Java内存寻址是32位或64位,但VM规范确保大多数字段(例如int,long,double等)都是相同的.
此外 - 与对象数量相关的GC调整注释可能不相关,GC可以在具有大堆的JVM上快速(我已经使用高达15GB的堆,具有非常快的GC) - 这更多地取决于你如何使用世代收集器方案,以及您的对象使用模式.虽然过去人们花费了大量的能量调整参数,但它依赖于工作负载,现代(Java 5+)JVM非常擅长自我调整 - 除非你有大量数据,否则你自己更有可能伤害自己具有强大的JVM调优功能.
正如在x86架构中所提到的,64位EMT64或x64处理器还包括用于执行原子写入或其他可能也会影响高性能应用程序的选项的新指令.
小智 3
如果您需要更大的堆,那么性能问题就毫无意义了,不是吗?或者您有横向扩展的计划吗?
我听说 64 位应用程序的主要问题是完整的垃圾收集可能需要很长时间(因为它基于活动对象的数量)。因此,您需要仔细调整 GC 参数以避免完全收集(我听说过一个关于一家拥有 64 GB 堆的公司的轶事,并调整了他们的 GC,以便他们永远不会进行完全收集;他们只是关闭每周下降一次)。
除此之外,请认识到 Java 的设计是 32 位的,因此一次将数据移动到 64 位,您不太可能看到任何巨大的性能提升。而且您仍然仅限于 32 位数组索引。
| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |