如果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 ifarch.matches(“[Aa]lpha.*”)
哪台是64位机器?如果“x86_128”支持-d64选项,您会说它不支持。如果jvm来自其他供应商呢?我不确定其他jvm是否对此有属性。