前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java:windows下获取当前虚拟机(java.exe)所在路径

java:windows下获取当前虚拟机(java.exe)所在路径

作者头像
10km
发布2019-05-25 21:44:48
1.8K0
发布2019-05-25 21:44:48
举报
文章被收录于专栏:10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433546

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

代码语言:javascript
复制
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

参考:

http://stackoverflow.com/questions/9006127/find-absolute-java-exe-path-programatically-from-java-code

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年12月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档