我在64位Windows Vista上安装了一个Java桌面应用程序,内存为24GB。我的程序只找到24GB中的4个。我正在使用
获取RAMwmic 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。
我怀疑我运行的是32位WMI,可能有4GB的限制。如何运行64位WMI?
答案 0 :(得分:2)
我猜你是在使用32位JRE而不是64位。我们能看到java -version
的输出吗?
答案 1 :(得分:2)
Windows WOW64 layer的一部分是尽可能完美地模拟32位环境。否则它是一个糟糕的模拟器。
32位应用程序的WMI将只返回32位应用程序以前可以预期的内容。例如,假设程序试图使用32位整数存储系统内存的字节数。好吧,如果WMI说实话并返回24 GB,那么程序会崩溃尝试将该数字填入32位整数(如果未检查操作则给出错误的结果)。
建议的解决方案是使用64位JRE并让程序以64位运行。
答案 2 :(得分:1)
如果您知道自己在64位系统上的32位JRE中,则可以按如下方式运行64位WMIC:
%SystemRoot%\sysnative\cmd.exe /c wmic computersystem get TotalPhysicalMemory /format:list
请注意,此命令无法在64位JRE或32位系统上运行,因此您需要确定首先使用的环境。