2017-01-17 2 views
0

나는 this을 읽었지만, 은 충분하지 않다.!프로그램에서 JVM 버전을 찾는 방법 ... 자세한 내용은?

내 말은 것입니다 : 내가 실행할 때

자바 -version

내가 얻을 :

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 버전을 "내부에서"액세스하는 프로그래밍 방식 (연결하는 질문에 설명 된대로)

MX bean --- vmversion: 2.8 

내 문제를 사용

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 

: 우리의 빌드 서버는 IBM의 자바의 약간 이전 버전을 실행)에, 나는 단지와 같은 값을 참조하십시오. java -version은 다음과 같이 표시합니다.

J9VM - R28_Java8_SR1_20150410_1531_B243669 

그러나 이러한 시스템 속성을 인쇄하면 이러한 세부 정보가 손실됩니다. 새로운 Java 코드와 약간 구형 인 JVM을 구별 할 수있는 Java 코드를 작성하는 방법을 찾지 못했습니다.

짧은 이야기 : 내 수준의 세부 정보를 줄 수있는 "내 JVM 내에서"뭔가를 수행하는 프로그램 방식이 있습니까?

는 (그들은 단순히 나이가 JVM 작업을 해달라고, 기본적으로 동적으로 우리의 JUnit 테스트의 일부를 사용하지 않도록 설정하는 것이 필요 새로운 JVM 내 지역 이클립스 설치에서 실행하는 경우 그러나 나는 그들을 실행하려는)

+0

MX 빈을 검사했는데 더 자세한 정보가없는 것으로 보입니다. 그래서'java.home' 속성을 읽는 것 외에는'bin'과'java'를 붙잡고'-version' 인수로 실행하고 출력을 읽고 파싱하지 않습니다. – Holger

답변

3

IBM Java가 없으며 Oracle Java 만 있습니다. 내가 java -version을 수행 할 때 내가 얻을 :

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) 

가이 코드와 정확히 일치하는 출력을 재현 할 수 있습니다 :

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 자바에 의해 추가 된 다른 정보가있을 수 있습니다.

new TreeMap<>(System.getProperties()).entrySet().forEach(e -> 
     System.out.printf("%s = %s%n", e.getKey(), e.getValue()) 
); 
+1

재미있는 것 : 나는 집으로 오는 길에 모든 물건을 버리는 것을 생각했습니다. 그러나이 생각을 완전히 잊어 버려라. 그래서, 당신은 손톱을 쳤습니다. 적어도 IBM JDK는 내가 찾고있는 것들을 제공하는 "java.fullversion"속성을 가지고 있습니다! 그래서, 간단하지만 슈퍼 도움이됩니다. 너의 방법으로 잔뜩 upvotes 보낸 ... – GhostCat

관련 문제