【问题标题】:How to retrieve RAM on a 64bit Windows 7如何在 64 位 Windows 7 上检索 RAM
【发布时间】:2011-12-09 16:54:18
【问题描述】:

我在具有 24GB 内存的 64 位 Windows Vista 上安装了 Java 桌面应用程序。我的程序只找到 24GB 中的 4 个。我正在使用

wmic computersystem get TotalPhysicalMemory /format:list

如果失败(如果他们没有 WMI)我使用

com.sun.management.OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) java.lang.management.ManagementFactory.getOperatingSystemMXBean();
long ram = (long) bean.getTotalPhysicalMemorySize();

因为我无法访问 PC,所以我无法运行测试来确认使用了哪种方法,但我几乎可以肯定这台机器确实有 WMI。

我怀疑我正在运行一个可能有 4GB 限制的 32 位 WMI。如何运行 64 位 WMI?

【问题讨论】:

    标签: java windows 64-bit wmi ram


    【解决方案1】:

    我猜您使用的是 32 位 JRE 而不是 64 位。我们能看到java -version的输出吗?

    【讨论】:

    • java与程序打包在一起,所以版本始终相同:java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode)
    • 你证实了我的怀疑。仅使用 32 位 JRE,它永远无法看到超过 4 GB 的 RAM。 64 位 JRE 看起来像这样:java version "1.7.0_01" Java(TM) SE Runtime Environment (build 1.7.0_01-b08) Java HotSpot(TM) 64-Bit Server VM (build 21.1-b02, mixed mode)
    【解决方案2】:

    Windows WOW64 layer 的一部分是模拟 32 位环境尽可能完美。否则它是一个糟糕的模拟器。

    32 位应用程序的 WMI 将仅返回 32 位应用程序以前可以预期的内容。例如,假设一个程序尝试使用 32 位整数存储系统内存的字节数。好吧,如果 WMI 说真话并返回 24 GB,那么程序会在尝试将该数字填充为 32 位整数时崩溃(或者如果未检查该操作,则会给出不正确的结果)。

    推荐的解决方案是使用 64 位 JRE 并让您的程序以 64 位运行。

    【讨论】:

      【解决方案3】:

      如果您知道自己在 64 位系统上的 32 位 JRE 中,则可以按如下方式运行 64 位 WMIC:

      %SystemRoot%\sysnative\cmd.exe /c wmic computersystem get TotalPhysicalMemory /format:list
      

      请注意,此命令不适用于 64 位 JRE 或 32 位系统,因此您需要先弄清楚您所处的环境。

      【讨论】:

      • 我已经想出了这个。我正在使用类似的系统:Runtime.getRuntime().exec("C:\\Windows\\" + (64bit == true ? "sysnative" : "system32") + "\\wbem\\wmic.exe computersystem get ...") 只是没有时间回答我自己的问题。谢谢!
      猜你喜欢
      • 2013-03-24
      • 1970-01-01
      • 2017-04-28
      • 2011-07-13
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多