Wednesday, 11 January 2012

Find out 32 bit or 64 bit java jdk version in Java

I have encountered one of the issue with java installation which is not combatable with my 32 bit machine.

32 bit is 4 bytes of size, where as 64 bit is 8 bytes of size. That means 64 bit takes more memory than 32 machines
Most of the times, if your code is complied with 32 bit jdk version, then you need to execute this class files in 32 bit machine/64 bit machine only. This will complies and executes fine, but in some cases if there is machine specific , you are in trouble with issues,so careful while installing jdk versions.

32 bit JVM is not compatible with other 64 bit hosts/frameworks as i have encountered issues tomcat 64 bit on java 32 bit

I am listing down the ways to find out the 32 bit vs 64 bit

As per Sun Specification "There is no public API to find out the 32 bit or 64 bit".

There are number of ways to find out the 32bit version or not.

One way is as "sun.arch.data.model" is one of the system property in JVM which has 32 bit or 64 bit or unknown, so we have to write a simple program to read the property value

So i have written sample code to find out bit version
public class BitVersionDemo {
 public static void main(String args[]) {
  System.out.println("version ="
    + System.getProperty("sun.arch.data.model"));
 }
}


and the output is
version =32
that means your installed jdk is 32 bit

on Linux :-

so if your system is installed java 64 bit, by running java -d32 command it gives the following message

bash-3.2$ java -d32 -version
Running a 32-bit JVM is not supported on this platform.


By giving -d64 command, the following informationn is displayed

-bash-3.2$ java -d64 -version
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) 64-Bit Server VM (build 20.2-b06, mixed mode)


On windows, "java -d32 -version" is giving error so you can write above samle to find out the version

Hope this helps for your debugging.

3 comments:

  1. Good tip. If you want to know what the reference size is you can use Unsafe.addressSize(). Note: this is usually 4 as most 64-bit JVM will be using 32-bit references for up to 32 GB of heap.

    ReplyDelete
  2. Thanks peter for your valuable suggestion.

    ReplyDelete
  3. Thanks for you comment on my post 10 Points on JVM heap space king. I see you have also shared a pretty useful tip. though in production we always run with JDK which is used for compilation but since Java is write once run anywhere this kind of issue is quite possible. you may also like my post 10 HotSpot JVM Option Java developer should know.

    ReplyDelete