2015-11-05 46 views
1

我有下面这段代码,如果我的应用程序在64位平台上运行,以检测:检测Java虚拟机架构10

public static boolean is64BitVM() { 
    String bits = System.getProperty("sun.arch.data.model", "?"); 
    logger.debug(String.format("sun.arch.data.model=%s", bits)); 
    if (bits.equals("64")) { 
    return true; 
    } 
    String java_vm_name = System.getProperty("java.vm.name"); 
    logger.debug(String.format("java.vm.name=%s", java_vm_name));  

    String os_arch = System.getProperty("os.arch"); 
    logger.debug(String.format("os.arch=%s", os_arch)); 

    if (bits.equals("?")) { 
    // probably sun.arch.data.model isn't available 
    // maybe not a Sun JVM? 
    // try with the vm.name property 
    return java_vm_name.toLowerCase().indexOf("64") >= 0; 
    } 
    // probably 32bit 
    return false; 
} 

它用来在Windows 7上很好地运行,但是升级后的Windows 10同一段代码开始报告32位架构:

2015-11-05 17:53:15,429 DEBUG [javawsApplicationMain] sun.arch.data.model=32 
2015-11-05 17:53:15,431 DEBUG [javawsApplicationMain] java.vm.name=Java HotSpot(TM) Client VM 
2015-11-05 17:53:15,431 DEBUG [javawsApplicationMain] os.arch=x86 

奇怪的是,当通过JWS运行报告32位架构,但是当我在我的IDE本地运行它,我得到正确的结果(64位)。 似乎是Windows 10安全模型的另一个严重问题。 有什么想法?

+0

您确定您正在运行相同的VM吗?你有多个安装? – Doon

+0

你有32位或64位JDK/JRE吗? – Rustam

+0

哪个版本的jdk或jre? – Marged

回答

0

工作的解决方案是卸载32位版本,然后安装最新的64位Java。起初我已经安装了Java 8,但我无法强制启动我的JWS应用程序(即使将自签名证书添加到例外以及.jnlp文件的URL也没有帮助)。最终安装了最新的Java 7,并且做到了这一点。