如何减少Java GC中STOP-THE-WORLD的时间

时间:2014-08-31 14:58:40

标签: java performance garbage-collection jvm

我们知道在Java中,完整的GC可以挂起JVM,也可以称为STOP-THE-WORLD。在许多应用程序中,挂起JVM太长时间会导致很多问题。我想知道如何减少GC中STOP-THE-WORLD的时间?减少STOP-THE-WORLD的时间会带来什么样的潜在缺点? (没有考虑没有世界停留行为的JVM)

2 个答案:

答案 0 :(得分:2)

有很多方法

  • 减少垃圾。内存分析器将有所帮助。
  • 使用较少的堆。分析器可以帮助减少使用的内存。
  • 请改用堆内存。有许多库可以存储堆中的数据。例如记载。
  • 使用更多内存并且GC会更少发生,当他们这样做时可能不那么严重。如果您使用的堆少于32 GB,这可能是一个快速的胜利。
  • 使用完全并发的收集器,如Azul的Zing。它没有STW收集器。

我将从内存分析器开始,以减少垃圾和堆的使用,并调整GC。

答案 1 :(得分:0)

如果您的对象长时间存在,您可以尝试使用New I / O包中的DirectBuffers。它们的创建和回收比基于堆的非直接缓冲区的创建和回收更昂贵,因为直接缓冲区是使用特定于操作系统的本机代码进行管理的。这种增加的管理成本使得直接缓冲对于一次性使用或不经常使用的情况来说是不好的选择。

直接缓冲区也不在Java垃圾收集器的范围内。