0

I'm interested in information from those with experience tuning Java to provide the best possible performance when supplied with two physical CPUs, 16 physical cores each (total of 32 physical cores) and 32 virtual cores (total of 64 cores) and 64 Gb of RAM. Answers should focus on which JVM provides the required CPU support (SIMD/HyperThreading etc) as well as any GC strategies employed to support such an environment.

Currently we're testing with OpenJDK 1.8 and the following GC options: -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=20 -XX:ConcGCThreads=5.

  1. Would Oracle JDK provide better support than OpenJDK?
  2. Are there alternative JDK/JVM options to consider?
  3. Is there a better alternative to G1GC?
2
  • try, measure and compare... Commented Jun 20, 2018 at 8:02
  • As an update for those interested in the topic; we are getting really good results with the G1GC collector and the posted options in the original question with Oracle JDK 8. Commented Jun 29, 2018 at 14:44

1 Answer 1

2

Full disclosure, I work for Azul Systems.

To answer your questions:

  1. From a JVM perspective, there is no difference between the Oracle JDK and OpenJDK. Oracle uses the OpenJDK as the base for their JDK (it is also the reference implementation for the Java SE standard). OpenJDK and Oracle JDK, therefore, support the exact same collectors with the same options.
  2. From what you've provided this is not a question that can be answered exactly. You've used the ergonomics options to set a maximum pause time for GC and you've set the number of threads for use by the collector. Further tuning would really require data on the profile of your applications memory usage, i.e. how quickly does it allocate objects, how long does it typically retain references to those objects, the size of the working set and so on. Using data from the GC logging you could then evaluate changing the size of the young generation, tenuring threshold and so on.
  3. There definitely is. The Zing JVM (from Azul) uses a different approach to GC. Rather than using a write barrier, it uses a read barrier that enables true concurrency for collection and compaction with application threads. With the number of cores and amount of memory in your machine, you would have no problem meeting your goal of 200ms max pauses (many applications see pause times drop to around 10ms or less). Without more data of what your application is doing, I can't guarantee that but it's very likely.
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks @Speakjava I'll be grabbing a trial for Azul in the near future to see how much better it is.
Paul, please contact me if you need any help with this. Thanks.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.