Where do JVM Implementations differ (except licensing)? Does every JVM implement Type Erasure for the Generic handling?
Where are the differences between:
- JRockit
- IBM JVM
- SUN JVM
- Open JDK
- Blackdown
- Kaffe
..... Deals one of them with Tail-Call-Optimization?
Tail-call optimization is not yet supported by Java. John Rose is leading efforts to include this in a future release, and has described the approach, and some of the issues involved.
Another difference between JVMs is behaviour on undocumented API. (e.g. com.sun.xxx) For example, Sun's JVM and IBM's JVM both have slightly different behaviour on signal handling. (IBM's JVM doesn't allow the application to trap the "INT" signal in certain cases.)
JIT compiling is one thing that some JVM:s don't have.
Type erasure is a compiler function and as such JVM independent.
Things like type erasure are done by the compiler to be backward compatible with older JVMs. Most JVMs should support all the features you need, but some may be more optimized than others. I'm guessing the Sun JVM is probably the fastest.
If the JVM claims to be Java it must pass the TCK, providing a lot of stock funcitonaltiy.
The differences are in non-core places, like garbage collection, the jconsole/visualvm in the Sun JVM, precompilation etc.
clarification: TCK is the test suite that a virtual machine has to pass in order to be officially Java compliant.