java - 获取驱动器的页面文件大小

标签 java windows memory

如何找到驱动器当前的页面文件大小?

在windows 7之前,System32文件夹下曾经有一个名为pafefileconfig.vba的脚本可以使用。但现在已删除。

是否可以使用 JNA 获取详细信息?如果是,怎么办?

编辑

这是我编写的使用 JNA 获取页面文件信息的代码:

  Kernel32 kernel32 = (Kernel32)Native.loadLibrary("kernel32", Kernel32.class);
    MEMORYSTATUSEX memInfo = new MEMORYSTATUSEX();
    kernel32.GlobalMemoryStatusEx(memInfo);
    int toMB = (1024*1024);
    float RAM = memInfo.ullTotalPhys.floatValue();
    float totalPage = memInfo.ullTotalPageFile.floatValue();
    float availPage = memInfo.ullAvailPageFile.floatValue();
    float availRam = memInfo.ullAvailPhys.floatValue();

    System.out.println(memInfo.dwMemoryLoad);
    System.out.println("RAM "+RAM/toMB);
    System.out.println("RAM avail "+availRam/toMB);
    float ramUsed = RAM-availRam;
    System.out.println("RAM used "+ramUsed/toMB);
    System.out.println("Total page(RAM+Page) "+(totalPage)/toMB);
    float totalPageWithoutRam = totalPage-RAM;
    System.out.println("Total page(without RAM) "+(totalPageWithoutRam)/toMB);
    System.out.println("Total avail page(With free ram) "+availPage/toMB);
    float avialPageWithoutRam = availPage-availRam;
    System.out.println("Total page avail(Without ram) "+(avialPageWithoutRam)/toMB);
    System.out.println("Page used so far(Without ram) "+(totalPageWithoutRam-avialPageWithoutRam)/toMB);

这是输出:

82
RAM 12285.582
RAM avail 2167.6758
RAM used 10117.906
Total page(RAM+Page) 24569.348
Total page(without RAM) 12283.766
Total avail page(With free ram) 12115.641
Total page avail(Without ram) 9947.965
Page used so far(Without ram) 2335.8008

我使用 GetPerformanceInfo 也得到了相同的结果。

但这看起来与我运行wmic pagefile时得到的不同

wmic:root\cli>pagefile list /format :list


AllocatedBaseSize=12285
CurrentUsage=843
Description=C:\pagefile.sys
InstallDate=20120329043502.876449+330
Name=C:\pagefile.sys
PeakUsage=843
Status=
TempPageFile=FALSE

为什么我看到了差异?

最佳答案

信息是通过WMI公开的,您可以使用wmic命令行工具列出页面文件信息。

例如在我的桌面上:

C:\WINDOWS\system32>wmic pagefile list /format:list


AllocatedBaseSize=3840
CurrentUsage=213
Description=C:\pagefile.sys
InstallDate=20110616154020.168800+060
Name=C:\pagefile.sys
PeakUsage=231
Status=
TempPageFile=FALSE

您可以使用ProcessBuilder等来集成它......

正如所问,这暴露了 Win32_PageFileUsage结构,它定义了以 MB 为单位的大小。

关于java - 获取驱动器的页面文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19293297/

相关文章:

java - 如何在 Android 中发现我的应用程序的内存使用情况?

java - 在静态方法中创建新的 JAXB Marshaller 实例...它是线程安全的吗?

java - JSF 2.1 + Spring + hibernate 如何正确实现异常处理?

.net - SqlBulkCopy:传递 SqlBulkCopyOptions.UseInternalTransaction 和不传递它有什么区别?

linux - 选择路径cmd窗口中的最后一个目录

java - 每次运行 Java 都会创建一个新的 JVM 实例和一个新的堆吗?

Java 多进程和堆大小

java - 绝对路径中的文件未正确实例化

java - 将图像拆分为可点击区域

c++ - 为什么 HRESULT 0 表示成功?