如何判断我是在 64 位 JVM 还是 32 位 JVM 中运行(从程序中)运行?

如何判断运行应用程序的 JVM 是 32 位还是 64 位?具体来说,我可以使用哪些函数或属性在程序中检测这一点?


答案 1

对于某些版本的 Java,您可以从命令行使用标志和 .-d32-d64

$ java -help
...
    -d32          use a 32-bit data model if available
    -d64          use a 64-bit data model if available

要检查 64 位 JVM,请运行:

$ java -d64 -version

如果它不是 64 位 JVM,您将获得以下结果:

Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.

同样,要检查 32 位 JVM,请运行:

$ java -d32 -version

如果它不是 32 位 JVM,您将获得以下结果:

Error: This Java instance does not support a 32-bit JVM.
Please install the desired version.

这些标志在 Java 7 中添加,在 Java 9 中弃用,在 Java 10 中删除,在现代版本的 Java 上不再可用。


答案 2

检索系统属性,该属性标记此 JVM 的位数:

System.getProperty("sun.arch.data.model");

可能的结果有:

  • "32"– 32 位 JVM
  • "64"– 64 位 JVM
  • "unknown"– 未知的 JVM

HotSpot FAQ 中所述:

编写 Java 代码时,如何区分 32 位和 64 位操作?

没有公共 API 允许您区分 32 位和 64 位操作。将 64 位视为写入一次,随处运行的传统中的另一个平台。但是,如果您想编写特定于平台的代码(对您来说很遗憾),系统属性sun.arch.data.model的值为“32”,“64”或“未知”。

例如,如果您的 Java 代码依赖于本机库,并且您需要确定是在启动时加载 32 位还是 64 位版本的库,则可能需要这样做。


推荐