Java7 对比 java5 垃圾回收

Java7 vs java5 garbage collection

我们正计划将 运行 在 Java5 堆栈上的企业应用程序迁移到 Java7 堆栈。我们在 implicit gc 调用(主要是主要 gc)方面存在问题,导致系统在短时间内(从 5 分钟到 30 分钟不等)不稳定。分析 gc 统计数据后,我们发现 Compact 阶段与标记和清除阶段相比需要相当长的时间才能完成。我知道压缩非常复杂且耗时,但它会影响面向客户的应用程序服务器,并且在此阶段很少有连接断开。

现在,我的问题是,当我们迁移到 Java7 时,是否有比 Java5 更好的垃圾收集过程?

为应用服务器提供良好的系统资源。

  1. 每个应用服务器包含 32 cpu 个内核
  2. 包含 64 GB 内存
  3. 应用服务器是 IBM webpshere 服务器
  4. 操作系统 - 64 位 IBM AIX

如前所述,gc 是由于隐式系统调用而发生的。没有调用 gc 的显式系统调用。

默认情况下,java 7 在服务器 class 机器上使用并行 GC。如果您使用的是 JDK 7 update 4 或更高版本,请切换到 G1 垃圾收集器,这可能会给您带来更好的性能。但正如@the8472 所建议的那样,了解您在 java 5 和现在的当前环境中使用的设置会很好。

Java 7 在 2015 年 4 月左右达到生命周期结束。为什么不迁移到 1.8?

GC 性能通常会随着 java 主要版本的发布而提高(在某些情况下会随着次要 GC 的发布而提高)。

你应该看看不同的GC调优标志,以下link可能对你有帮助 http://www.oracle.com/technetwork/articles/java/vmoptions-jsp-140102.html

http://stas-blogspot.blogspot.com/2011/07/most-complete-list-of-xx-options-for.html

Now, my question is as we are migrating to Java7, is there a better garbage collection process compared to Java5?

通常是的,虽然作为@Pushkar,你真的应该迁移到 Java 8.

关于您的应用程序的具体情况,听起来您需要在 Java 5 上调整/重新调整垃圾收集。如果您定期遇到 5 到 30 >>分钟<<由于 GC 导致的不稳定,有一些相当错误的地方。当前行为可能是由于您的应用程序或 Websphere(例如内存泄漏、过度缓存等)造成的,也可能是由于 GC 调优不当造成的。

简而言之,切换到 Java 7(或 8)可能会让事情变得更好 "out of the box",但您可能需要付出更多努力来解决您的问题的根本原因问题。

最后,我建议一些显而易见的事情。

  • 逐步实施更改。不要一次升级您的应用程序、websphere 版本、java 版本等。

  • 一次升级您的服务器。制定一个 roll-back 计划,以防出现不可接受的性能。

  • 如果可能,首先测试所有内容...包括性能/负载测试。