java:windows下获取当前虚拟机(java.exe)所在路径
Properties java.lang.System.getProperties()的注释中有对”java.home”属性的说明:” Java installation directory “,很简单,就是java安装路径。如果你要想在运行时获取当前java虚拟机所在的位置,通过System.getProperty(“java.home”)调用并不能获取准确的位置。比如:eclipse
Properties java.lang.System.getProperties()
的注释中有对”java.home”属性的说明:” Java installation directory “,很简单,就是java安装路径。
如果你要想在运行时获取当前java虚拟机所在的位置,通过System.getProperty(“java.home”)调用并不能获取准确的位置。
比如:
eclipse中将jre主目录设置为”C:\Program Files\Java\jdk1.8.0_111”,执行的jvm应该是”C:\Program Files\Java\jdk1.8.0_111\bin\java.exe”
但调用System.getProperty(“java.home”)返回的结果为”C:\Program Files\Java\jdk1.8.0_111\jre”
eclipse中将jre主目录设置为”C:\Program Files\Java\jdk1.8.0_111\jre”,执行的jvm应该是”C:\Program Files\Java\jdk1.8.0_111\jre\bin\java.exe”
但调用System.getProperty(“java.home”)返回的结果仍然是”C:\Program Files\Java\jdk1.8.0_111\jre”
也就是说”java.home”属性是一个固定的值,不会因为你执行java程序时使用的虚拟机是jre\bin\java.exe还是bin\java.exe而有什么不同。
所以java程序要想知道自己当前所在虚拟机的位置,是不能通过”java.home”属性来获取的。
因为Windows下可执行程序(.exe)搜索动态库(DLL)时首先搜索的就是它自己所在的路径,所以JVM运行时,它首先搜索的路径也就是包含java.exe的路径,所以这个路径也是”java.library.path”属性中第一个路径;
所以可以利用这个特性,通过”java.library.path”属性来间接获取jvm的位置。
下面是测试代码TestJVM.java
package testwb;
public class TestJVM {
public static void main(String[] args) {
String javaHome = System.getProperty("java.home");
System.out.println(javaHome);
final String javaLibraryPath = System.getProperty("java.library.path");
System.out.println(javaLibraryPath);
String jvmFolder = javaLibraryPath.substring(0, javaLibraryPath.indexOf(';'));
System.out.println(jvmFolder);
}
}
输出
C:\Program Files\Java\jdk1.8.0_111\jre
C:\Program Files\Java\jdk1.8.0_111\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;…(省略)
C:\Program Files\Java\jdk1.8.0_111\bin
注意
这个办法只在Windows平台下有用,在Linux下是不行的,同样上面的代码(要将indexOf(‘;’)中的’;’改成’:’号),在ubuntu下输出是
/usr/lib/jvm/java-8-openjdk-amd64/jre
/usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86…(省略)
/usr/java/packages/lib/amd64
更多推荐
所有评论(0)