Java JVM选择和垃圾收集

时间:2018-06-18 20:57:16

标签: java performance

我对那些具有调整Java经验的人提供的信息感兴趣,以便在提供两个物理CPU时提供最佳性能,每个物理CPU有16个物理核心(总共32个物理核心)和32个虚拟核心(总共64个核心) )和64 Gb的RAM。答案应该关注哪个JVM提供所需的CPU支持(SIMD / HyperThreading等)以及用于支持这种环境的任何GC策略。

目前,我们正在使用OpenJDK 1.8和以下GC选项进行测试:-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=20 -XX:ConcGCThreads=5

  1. Oracle JDK会提供比OpenJDK更好的支持吗?
  2. 是否需要考虑其他JDK / JVM选项?
  3. 是否有更好的替代G1GC

1 个答案:

答案 0 :(得分:2)

完全公开,我为Azul Systems工作。

要回答您的问题:

  1. 从JVM的角度来看,Oracle JDK和OpenJDK之间没有区别。 Oracle使用OpenJDK作为其JDK的基础(它也是Java SE标准的参考实现)。因此,OpenJDK和Oracle JDK支持具有相同选项的完全相同的收集器。
  2. 从您提供的内容来看,这不是一个可以准确回答的问题。您已使用人体工程学选项设置了GC的最大暂停时间,并设置了供收集器使用的线程数。进一步的调整确实需要在应用程序内存使用情况的概要文件中的数据,即它分配对象的速度,它通常保留对那些对象的引用多长时间,工作集的大小等等。使用GC记录中的数据,您可以评估年轻一代的大小,任职期限等的变化。
  3. 肯定有。 Zing JVM(来自Azul)使用不同的GC方法。它没有使用写屏障,而是使用了读屏障,该屏障为应用程序线程的集合压缩实现真正的并发。借助计算机中的内核数和内存量,您可以毫无问题地达到200ms最大暂停的目标(许多应用程序看到的暂停时间降至10ms或更短)。没有更多有关您的应用程序正在执行的数据,我不能保证,但是很有可能。