【问题标题】:How to clear the cache in Windows programatically?如何以编程方式清除 Windows 中的缓存?
【发布时间】:2015-03-10 15:41:24
【问题描述】:

我已经阅读了几篇关于如何使用外部应用程序清除缓存的帖子 herehere

我想运行性能基准测试,并想在每次运行前清除操作系统的文件系统缓存。我在 Java 中运行一个带有许多参数的程序,我需要一种自动化的方法来执行此操作,即在 Java 中以编程方式。

有什么建议吗?

【问题讨论】:

  • 您可以使用 JNA 调用 SetSystemFileCacheSize((SIZE_T) -1, (SIZE_T) -1, 0),它会刷新缓存。但我认为这还不够,因为它只是将页面从工作集转换到备用列表,而没有真正清除它们。
  • RAMMap 使用未记录的系统调用来清除备用列表,我认为这需要 NT 6。有关以下 sn-p 所需声明的更多信息,请参阅this pageSYSTEM_MEMORY_LIST_COMMAND command = MemoryPurgeStandbyList;@987654328 @ 这需要启用"SeProfileSingleProcessPrivilege",为此提升的进程需要调用OpenProcessTokenLookupPrivilegeValueAdjustTokenPrivileges
  • 我忘了说调用SetSystemFileCacheSize刷新缓存需要启用"SeIncreaseQuotaPrivilege"

标签: java windows caching


【解决方案1】:

您可以使用批处理文件清除缓存并在 java 中调用该批处理文件。

这是一个在 java 中调用批处理文件的命令:more here

Runtime.getRuntime().exec("cmd /c start clearCache.bat");

此批处理文件将清除windows 中的所有java cache。只需在您的 java 代码中调用此批处理文件即可执行

@Echo Off

echo =========================

echo Now clearing all users Java cache folder

set "docandset=%homedrive%\users"

     >> c:\Delete.log echo/ "Java\Deployment\cache\6.0\"

for /f "delims=" %%a in ('dir "%docandset%" /ad /b') do (

for %%b in (

"%docandset%\%%a\AppData\LocalLow\Sun\Java\Deployment\cache\6.0"

) do (

echo %%b >> c:\Delete.log

cd /d %%b >> c:\Delete.log  2>&1

rd /s /q %%b >> c:\Delete.log  2>&1

del /f /s /q %%b >> c:\Delete.log  2>&1

)

)

echo =========================

echo COMPLETE!!!! 

echo =========================

echo All users Java cache folder has been cleared.

PAUSE

在这里找到它:http://community.spiceworks.com/scripts/show/1928-clear-all-users-java-cache

你也可以检查一下,清除 windows 临时文件:Batch delete temporary Windows files (system, browsers, cache, etc) for all users

【讨论】:

  • 这条评论似乎描述了如何从磁盘中清除 Java 缓存,但我相信问题是问如何从内存中清除系统文件缓存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
相关资源
最近更新 更多