如果jvm支持-d64选项,如何从java代码进行测试?

如果jvm支持-d64选项,如何从java代码进行测试?,java,virtual-machine,Java,Virtual Machine,我考虑过使用下面的代码,但是有没有更干净的方法 Process theProcess = Runtime.getRuntime().exec("java -d64 -version"); BufferedReader errStream = new BufferedReader(new InputStreamReader(theProcess.getErrorStream())); System.out.println(errStream.readLine()); 如果您使用的是Sun JVM

我考虑过使用下面的代码,但是有没有更干净的方法

Process theProcess = Runtime.getRuntime().exec("java -d64 -version");
BufferedReader errStream = new BufferedReader(new InputStreamReader(theProcess.getErrorStream()));
System.out.println(errStream.readLine());

如果您使用的是Sun JVM,我认为您可以使用
Sun.arch.data.model
系统属性(使用
system.getproperty()
获取此值。

您可以使用

String arch = System.getProperty("os.arch")
if (arch.equals("amd64") || arch.equals("x86_64")) {
    // Machine is 64-bit
}

确定机器本身是否为64位机器。但不确定是否检查VM本身。

决定将此作为答案发布:

public static boolean supports64Bit() {
    try {
        final Process process = Runtime.getRuntime().exec("java -d64 -version");
        try {
            return process.waitFor() == 0;
        } finally {
            process.getInputStream().close();
            process.getOutputStream().close();
            process.getErrorStream().close();
        }
    } catch (IOException e) {
        // log error here?!
        return false;
    }
}
关闭与流程关联的所有流是一种良好做法,可以防止资源泄漏


未测试。

最简单的方法是通过Java WebStart和本地JNLP文件。然后使用适当的选项调用“javaws foo.JNLP”


您可以有依赖于体系结构的选项和库。

为什么需要知道?您应该使用
process.waitFor()!=0
来决定它是否有效。不过这没什么好处。@Thorbjorn:我需要启动其他一些java代码,根据jvm是否支持-d64选项,这取决于jvm是否支持它。感觉像是另一个好主意的复制品,只需执行一次,然后将结果缓存到静态变量中。这是不准确的,不需要重复trusted.and if
arch.matches(“[Aa]lpha.*”)
哪台是64位机器?如果“x86_128”支持-d64选项,您会说它不支持。如果jvm来自其他供应商呢?我不确定其他jvm是否对此有属性。