Recently one of colleague was unable to launch eclipse, it
says ‘Java returned with exit code =1’ , we have tried lot of options by
increasing heap memory and all, but finally what worked out for him was by
setting a UseCompressedOops flag in eclipse configuration file.
He was using 64 bit machine and 64 bit JVM.
Here is the story, what compressed flag does.
The -XX:+UseCompressedOops option can improve performance of
the 64-bit JRE when the Java object heap is less than 32 gigabytes in size. In
this case, HotSpot compresses object references to 32 bits, reducing the amount
of data that it must process.
Compressed oops is supported and enabled by default in Java
SE 6u23 and later. In Java SE 7, use of compressed oops is the default for
64-bit JVM processes when -Xmx isn't specified and for values of -Xmx less than
32 gigabytes. For JDK 6 before the 6u23 release, use the -XX:+UseCompressedOops
flag with the java command to enable the feature.
In summary:
Java version <6u23 - use command to set it.
Java version >=6u23 - by default enabled.
JDK7 - if -xmx not specified or -xmx <32GB =>
configured bydefault
You might have a question how does 64 bit pointer fits into
32 bit pointer, how it will be compressed. Please go through below link to
understand more about it.
This is how JRocket JVM is compressing it, this will give us
some understanding.