在对同一主题进行一些研究之后,我使用了方法" getVersion()"检查JVM是64位还是32位。
public static String getVersion()
{
String version = System.getProperty("sun.arch.data.model");
if (version != null && version.contains("64")){
return "64";
}else{
return "32";
}
}
在某些情况下出错了。是的,因为标志名称提到,该方法显然是依赖于阳光的。我试图获得该物业" os.arch"也。但在某些情况下,它错误地识别JVM。 有没有更值得信赖的检查方式? 我的应用程序纯粹基于Windows。而且我不希望这种方法适用于任何其他平台。
答案 0 :(得分:1)
您需要从这里获得2个jar文件: https://java.net/projects/jna/downloads/directory/3.3.0
(代码编辑以修复IsWow64Process的评估)
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.WinNT;
import com.sun.jna.ptr.IntByReference;
public class Main {
public static void main(String[] args) {
System.out.println(is64BitJava());
}
private static boolean is64BitJava(){
if (!is64BitWindows()){
return false;
}
Kernel32 kernel32 = Kernel32.INSTANCE;
WinNT.HANDLE handle = kernel32.GetCurrentProcess();
if (!kernel32.IsWow64Process(handle, ref)){
return false;
}
return ref.getValue() == 0;
}
private static boolean is64BitWindows(){
String envVar = System.getenv("ProgramW6432");
if (envVar == null){
envVar = "";
}
return envVar.length() > 0;
}
}
为了检查Windows是否为64位,我检查是否定义了ProgramW6432
环境变量。
然后我使用Win32 API GetCurrentProcess
和IsWow64Process
函数来检查当前的运行过程。
答案 1 :(得分:1)
这是一个纯Java解决方案,它检查将32位库链接到当前进程的能力:
static boolean is64bitProcess() {
String wow64_kernel = System.getenv("systemroot") + "\\SysWOW64\\kernel32.dll";
if (new File(wow64_kernel).exists()) {
try {
System.load(wow64_kernel);
} catch (UnsatisfiedLinkError e) {
return true; // can not link 32-bit library into 64-bit process
}
}
return false;
}
答案 2 :(得分:-1)
检查这个
System.out.println(System.getProperty("os.arch"));