How does one obtain the location of the executable of the currently running JVM during runtime? I would like to instantiate another JVM as a subprocess using the ProcessBuilder class.
I am aware that there is the java.home
System property, but this doesn't specify the location of the JVM executable. I understand I could do something like this to get the path:
System.getProperties().getProperty("java.home") + File.pathSeparator + "bin" + File.pathSeparator + "java"
This code isn't platform independent, because the Windows executable's name is java.exe
, not java
. Is there a way to get the path of the JVM executable that takes the platform's idiosyncrasies into account?
In Windows : inside your JRE, you will have a folder like this : C:\Program Files (x86)\Java\jre7\bin\client --> this directory contains the client JVM jvm.
You need to find the Java executable file (java.exe file) on your computer hard drive. It is often located in the "Program Files\Java" or "Program Files (x86)\Java" folder, within a possible subfolder below the Java folder. Once you find the file, select it and click OK.
The way to start a jvm is by invoking the main, either by invoking a jar using java -jar MyJar or by simply running main class from an IDE. Yes, Multiple jvm instances can be run on a single machine, they all will have their own memory allocated. There will be that many jvms as many main programs you run.
You could always just use os.name to check if the user is running Windows or not. That'll work on OS X, Linux and Windows at
String jvm_location; if (System.getProperty("os.name").startsWith("Win")) { jvm_location = System.getProperties().getProperty("java.home") + File.separator + "bin" + File.separator + "java.exe"; } else { jvm_location = System.getProperties().getProperty("java.home") + File.separator + "bin" + File.separator + "java"; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With