首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从程序中找到JVM版本..。还有更多的细节吗?

如何从程序中找到JVM版本..。还有更多的细节吗?
EN

Stack Overflow用户
提问于 2017-01-17 20:16:05
回答 1查看 8K关注 0票数 2

我读过this,但还不够好!

我的意思是:当我跑

java -version

我得到:

代码语言:javascript
复制
java version "1.8.0"
Java(TM) SE Runtime Environment (build pxa6480sr3fp20-20161019_02(SR3 FP20))
IBM J9 VM (build 2.8, JRE 1.8.0 Linux amd64-64 Compressed References 20161013_322271 (JIT enabled, AOT enabled)
J9VM - R28_Java8_SR3_20161013_1635_B322271
JIT  - tr.r14.java.green_20161011_125790
GC   - R28_Java8_SR3_20161013_1635_B322271_CMPRSS

..。

但是,当我使用任何编程方法“从内部”访问JVM版本时(正如我链接到的问题所概述的那样),我只看到以下值:

代码语言:javascript
复制
Property: java.vm.specification.version   : 1.8
Property: java.vm.specification.vendor    : Oracle Corporation
Property: java.vm.specification.name      : Java Virtual     Machine Specification
Property: java.vm.version                 : 2.8
Property: java.vm.vendor                  : IBM Corporation
Property: java.vm.name                    : IBM J9 VM
Property: java.specification.version      : 1.8
Property: java.specification.vendor       : Oracle Corporation
Property: java.specification.name         : Java Platform API Specification

使用

代码语言:javascript
复制
MX bean --- vmversion: 2.8

我的问题是:我们的构建服务器运行一个稍微老一点的IBM版本。java -version将显示出,就像

代码语言:javascript
复制
J9VM - R28_Java8_SR1_20150410_1531_B243669 

但是:当我打印那些系统属性时,这些细节就会丢失!我还没有找到一种方法来编写java代码,从而能够区分稍微老一点的JVM和较新的JVM。

长话短说:在“我的JVM”中有什么编程的方法可以给我提供这样的细节吗?

(基本上,我需要它来动态禁用一些JUnit测试;它们只是不适用于较旧的JVM;但我希望在使用较新的JVM在本地eclipse安装中运行时执行它们)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-17 20:31:49

我没有IBM,只有Oracle Java。当我做java -version时,我得到:

代码语言:javascript
复制
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

我可以用下面的代码来重现这个精确的输出:

代码语言:javascript
复制
System.out.printf("java version \"%s\"%n" +
                  "%s (build %s)%n" +
                  "%s (build %s, %s)%n",
                  System.getProperty("java.version"),
                  System.getProperty("java.runtime.name"),
                  System.getProperty("java.runtime.version"),
                  System.getProperty("java.vm.name"),
                  System.getProperty("java.vm.version"),
                  System.getProperty("java.vm.info"));

可能还有IBM添加的其他信息。为什么不尝试转储所有系统属性并亲自查看:

代码语言:javascript
复制
new TreeMap<>(System.getProperties()).entrySet().forEach(e ->
        System.out.printf("%s = %s%n", e.getKey(), e.getValue())
);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41706144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档