JVM Boolean Options
Imagine having a tool that can automatically detect JPA and Hibernate performance issues. Wouldn’t that be just awesome?
Well, Hypersistence Optimizer is that tool! And it works with Spring Boot, Spring Framework, Jakarta EE, Java EE, Quarkus, or Play Framework.
So, enjoy spending your time on the things you love rather than fixing performance issues in your production system on a Saturday night!
Introduction
While trying to generate a Java Heap Dump, I remembered there is one JVM option I could use for this purpose. Since I can’t always remember these options’ names, I went to the Oracle documentation.
The problem
So I could extract the following arguments:
-XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/jvm/dumps/
After limiting my Java Heap size to a value that I know it’s too low, I was expecting the Heap Dump to be generated whenever I got an OutOfMemoryError. But no dump got generated. I googled the issue, checked for JVM bugs but the only reported issue was a miss-usage when you give the JVM options after the Java Main class, but that wasn’t my case.
The fix
Then I stumbled on a slightly different version of my original setting (the one that I copy-pasted from the Oracle site):
-XX:+HeapDumpOnOutOfMemoryError
Then, I remember I once read about Boolean JVM options, and the very same Oracle site details this usage:
“Boolean options are turned on with -XX:+ and turned off with -XX:-.”
I think the Oracle JVM options table should show the “+” version, since that’s usually what you are looking for, especially because it’s disabled by default (so the “-” version behaves like not giving it at all).
If you enjoyed this article, I bet you are going to love my Book and Video Courses as well.
Conclusion
The HeapDumpPath should point to a folder, but if your setting is something like /logs/jvm/dumps/, and your OS only contains /logs/jvm, then you won’t get a “java_pid.hprof” file within the /logs/jvm/dumps/ folder, but a dump file in /logs/jvm/, as the JVM doesn’t create the missing folders (a.k.a mkdirs).
