Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取驱动器的页面文件大小_Java_Windows_Memory - Fatal编程技术网

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

Java 获取驱动器的页面文件大小,java,windows,memory,Java,Windows,Memory,如何找到驱动器的当前页面文件大小 在windows 7之前,System32文件夹中曾经有一个名为pafefileconfig.vba的脚本,可以使用它。但它现在被移除了 是否可以使用JNA获取详细信息?如果是,如何进行 编辑 这是我编写的使用JNA获取页面文件信息的代码: Kernel32 kernel32 = (Kernel32)Native.loadLibrary("kernel32", Kernel32.class); MEMORYSTATUSEX memInfo = new

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

在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
我在使用上也得到了同样的结果

但这与我运行wmic页面文件时得到的结果不同

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命令行工具列出页面文件信息

e、 g.在我的桌面上:

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
等集成它


正如有人问的那样,这是公开结构,它定义了以MB为单位的大小。

您是否查看了
pagefileconfig.vba
的源代码以获得灵感?我猜(因为我没有副本),它将包含一组对库的调用或可能与任务相关的可执行命令,尽管我假设这些调用在进入Windows7.0时会发生变化。我试试这个。:)allocatedbasesize、currentusage和peakusage是否以MB为单位?您实际上是在读取数据结构,这些数据结构以MB为单位定义大小。@sonic从GlobalMemoryStatusEx()返回的值有一个“小开销”-它在dwTotalPageSize的
MEMORYSTATUS
元素中显式调用。这是意料之中的-总是会涉及一些开销。嗯。。但我在这里看到了巨大的不同。大约1.4gb。