Comparison Between Sun JDK And Oracle JRockit

As we all know, JVM is responsible in converting the java byte code into machine code (which the machine understands)
Sun jdk and Oracle JRockit do the same thing using different mechanism.

**************************
Sun JDK uses interpreter (Interpreter and JIT in previous releases) — In this mechanism, the byte code is read and the translated into machine language, but these results are not saved in the memory. So every time even if the same method is run again and again, the JVM has to translate the code into machine language. This means machine code will not be reusable as it is not saved anywhere in the memory.

Oracle JRockit uses only JIT compiler (Just In Time) — JIT mechanism means, once a method is run, the byte code is translated to machine language and this is saved in the memory. This means if the method is run again, there is no need for translation and the machine code is reused.

Because of the interpreter mechanism used by sun jdk, the start up time for the server is faster because it does not have to save the machine code in memory. Once the translation is done for a method, it moves to the other one. Where as oracle JRockit saves the code, which is why  start up takes longer. For the same reason, oracle JRockit uses more memory than sun jdk.

In the long run, JRockit gives a slightly better performance as compared to sun jdk.

**************************
Oracle JRockit optimizes the code. It identifies the HOT SPOTS which means the methods that are being run more often. These methods are then queued up for optimization. This code is then optimized which improves performance. Many issues are seen becuase of the code optimization mechanism because it is a complex procedure. Optimization can be disabled.

JIT is also used by Sun JDK, but that was in the earlier versions. The Java Hotspot VM removes the need for a JIT compiler in most cases.

**************************
Memory spaces in jdks:

Sun JDK has the following memory spaces: Eden space, survivior space, tenured generation and permanent generation. The objects move from one space to another according to its age and survival from garbage collection.

JRockit has 2 spaces, young generation and old generation, it uses the same mechanism of garbage collection. There is nothing called as permanent generation in JRockit.

*************************
Memory and other JVM tunings:

JRockit gives advanced JVM tunings. From the release R26 and above, JRockit takes care of few tunings by itself. For example if there is an outofmemory occuring on the native TLA in previous releases due to insufficient TLA size which is 2k by default, in later releases the JRockit tunes these settings as per the requirement of the application. This has to be done and taken care of by the user in case of sun jdk. But then it is always better to be in a safer side it is recommended to have the tunings done by self.

*************************
JVM Crashes:

When JRockit crashes, a JRockit dump is produced which basically has the reason for the crash. JRockit uses native libraries by default. This can be disabled by disabling the NativeIO from the admin console. The most common reason for the JRockit crash is the conflict between native libraries. For example, the jdbc type 2 drivers which use native libs. It is recommended to use type 4 pure java drivers when using oracle JRockit. Another reason for the crash can be code optimization because of its complexity. The stack trace in the JRockit dump will show the exact cause. When the JVm crashes, it is important to test it again by disabling code optimization and check if the issue still persists.

A sun jdk crash produces hs_err_pid file which has the root cause of the crash. There can be several reasons for sun jdk crash are due to bugs in them (defects in the code of the jdk). These issues need to be reported to the sun team.

**************************
Tools for performance tracking:

Sun jdk that comes bundled with weblogic server gives tools like JConsole which can be used for performance tracking and monitoring the memory in use of the JVM. This tool is very much necessary so that each and every detail about the memory being used by the application, cpu usage, memory leaks can be identified.

Oracle JRockit has a much more advanced tool JRMC (JRockit mission Control) which gives advanced tracking features. JRA recordings can be taken which gives each detail about the JVM arguements, garbage collection details, methods using the maximum memory etc. The memory leak detector tool in JRMC is also one important and very helpful tool. These make it easy for the user and administrators to maintain a record and identify the issues with the application and the JVM.

**************************
If you have any queries related to both the jdks, please feel free to get back to us.

17 comments

  1. Nice article Divya … can you also elaborate on some tuning recommendations on both JVMS, like the basics, where to start and how to tune JVM for quciker startup and GC.

  2. I do like Jrockits mission control but on balance prefer to use Hotspot over Jrockit given the choice.

    First thing we found is that Init – Max size matter more with Jrockit, I like to set my Init size to my working set size and my max size greater I can then see when anything interesting starts. With Jrockit getting init size wrong really hurts as it tries very hard to stay inside this. With Hotspot as long is max size is big it’ll be fine. Note this is 64 bit OS’s 32Bit one have good reasons to set init – maxsize the same.

    I prefer Hotspot because it far more widely used everyone tests against it. If you really do want a quiet life you follow suit.

    I also like the Hotspot third party tooling, MAT, thread analysers, VisualGC and GC graphing tools etc a very rich eco system.

    1. Hi Martyn,

      Thanks a lot for sharing your thoughts! There are definitely a lot of people who will go with hotspot if given a choice, it is more trustworthy and widely used as you said.

      Cheers!
      -Divya 🙂

  3. Hello Divya, good morning,

    Great text, but I am trying to figure out, why , in Jrockit JVM, I have -xms and xmx of 1g, but when I give top command it shows 1.7 Gb

    I know it has to have some memory to handle the JVM itself. But why it uses so much additional memory (.7g)

    (this is weblogic application)

    Thank you

    Rafaela

    1. Hi Salman,

      As per oracle, JRockit is specially built for Linux operating system. The features of both the jdks are given in the article, it only depends on your requirement which jdk suits you better.

  4. Thanks Divya for this nice article.

    I have a question regarding 64 bit JRockit.

    Would like to know how 64 bit performs when compared to 32 bit
    and what are the things to be considered to migrate to 64 bit JRockit.

    Thanks in advance.

    Regards,
    Sajeev

    1. Hi Sanjeev,

      The advantage of migrating to a 64bit JRockit is that you can dedicate more memory to your application. But a 64bit JVM comes with a slight performance impact simply because the native pointers use 8 bytes instead of 4. So the loading of extra data is slower compared to what happens in the 32 bit system.

      – Divya

    1. It is used to start stop the managed servers remotely.. ie. via admin console..
      it has has start script and stop script feature that u can use to do some task before starting a server of after stopping a server..

Comments are closed.