我想知道如何使用Java代码或CMD行代码清除Java缓存。这应该在任何从Windows 7及以上的Microsoft Windows计算机上完成。由于要在多台计算机上进行,因此文件路径将不同。该应用程序使用Javaw作为其默认启动应用程序(与Javaws或Webstart不要混淆 - 我已经有了清除Javaws缓存的代码)。因此,我需要知道如何清除Javaw缓存。
javaws -clearcache // Remove all non-installed applications from the cache.
和
javaws -uninstall // Remove all applications from the cache.
javaws -Xclearcache -silent -Xnosplash
我的理解是,有三种主流的Java缓存技术:
Java Webstart和相关的浏览器插件中有应用程序缓存。可以使用javaws
命令行工具或Java控制面板来控制它,如@RuchiraGayanRanaweera的答案所述。
据我所知,javaws
是唯一支持从命令行控制应用程序缓存的方法。
Oracle的J2EE容器产品线(又名OC4J)中包含Java对象缓存框架。这在OC4J文档中有描述:"第9章 - Java对象缓存"。(我认为这不是您要找的内容。)
一些JVM实现具有一个功能,允许将编译后的类缓存并由不同的JVM共享或重复使用。IBM Java和Eclipse OpenJ9支持此功能;例如,请参见"共享类缓存"。
然而,这不是标准(免费)Oracle或OpenJDK Java的支持功能。显然,在Java 5中引入了一个模糊的JVM特性,用于共享系统类数据,并且自Java 8以来存在一种商业功能,可将其扩展到应用程序类。详细信息很难找到...
更新 - 自Java 10起,Oracle和OpenJDK JVM现在支持"类数据共享"(CDS)。本文档提供了如何从命令行重新生成缓存的说明。
考虑到问题最初提出的背景,我怀疑 OP 实际上是在询问 Java Webstart 应用程序缓存,但并没有意识到这个功能是 Java Webstart 而不是整个 Java SE 的一部分。
创建一个名为clearCache.bat的批处理文件。
@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
现在从命令提示符(cmd)运行批处理文件
Runtime.getRuntime().exec("cmd /c start clearCache.bat");
清除缓存后,它将向您显示警报。
javaw
?你确定没有叫做cache
的东西吗? - Ruchira Gayan Ranaweera