我对具有Java调优经验的人员感兴趣,他们提供的信息包括两个物理CPU,每个16个物理核心(总共32个物理核心)和32个虚拟核心(总共64个核心)以及64 Gb的虚拟核心。内存。答案应该集中在哪个JVM提供所需的CPU支持(SIMD / HyperThreading等)以及用于支持这种环境的任何GC策略上。
当前,我们正在使用OpenJDK 1.8和以下GC选项进行测试:-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=20 -XX:ConcGCThreads=5
。
Oracle JDK是否比OpenJDK提供更好的支持?
是否有其他JDK / JVM选项可供考虑?
有没有更好的替代方法?
最佳答案
完全公开,我为Azul Systems工作。
要回答您的问题:
从JVM的角度来看,Oracle JDK和OpenJDK之间没有区别。 Oracle使用OpenJDK作为其JDK的基础(它也是Java SE标准的参考实现)。因此,OpenJDK和Oracle JDK支持具有相同选项的完全相同的收集器。
根据您提供的信息,这不是一个可以准确回答的问题。您已使用人体工程学选项设置了GC的最大暂停时间,并设置了供收集器使用的线程数。进一步的调整确实需要在应用程序内存使用情况的概要文件中的数据,即它分配对象的速度,它通常保留对那些对象的引用多长时间,工作集的大小等等。然后,使用来自GC日志记录的数据,您可以评估更改年轻代的大小,使用期限阈值等。
肯定有。 Zing JVM(来自Azul)使用不同的GC方法。它没有使用写屏障,而是使用了读屏障,该屏障实现了真正的并发性,以便使用应用程序线程进行收集和压缩。借助计算机中的内核数量和内存量,您可以毫无问题地达到200ms最大暂停的目标(许多应用程序看到的暂停时间降至10ms或更短)。没有更多有关您的应用程序正在做什么的数据,我不能保证,但是很有可能。