【发布时间】:2014-11-06 13:26:28
【问题描述】:
我想知道如何使用 Java 代码或 CMD 行代码清除 Java 缓存。
这应该在 Windows 7 以上的任何位置的 Microsoft Windows 机器上完成。
这应该在多台计算机上完成,因此文件路径会不同。
应用程序使用 Javaw 作为它启动的默认应用程序(不要与 Javaws 或 Webstart 混淆 - 我已经有代码如何清除 Javaws 缓存)。所以我需要知道如何清除 Javaw 缓存。
【问题讨论】:
我想知道如何使用 Java 代码或 CMD 行代码清除 Java 缓存。
这应该在 Windows 7 以上的任何位置的 Microsoft Windows 机器上完成。
这应该在多台计算机上完成,因此文件路径会不同。
应用程序使用 Javaw 作为它启动的默认应用程序(不要与 Javaws 或 Webstart 混淆 - 我已经有代码如何清除 Javaws 缓存)。所以我需要知道如何清除 Javaw 缓存。
【问题讨论】:
您可以使用Java Control Panel 来完成。
How do I clear the Java cache?
How can do it in command line?
这将是清除缓存的命令
javaws -clearcache // Remove all non-installed applications from the cache.
和
javaws -uninstall // Remove all applications from the cache.
【讨论】:
javaw?你确定没有打电话给cache。
这可以通过以下行存档:javaws -Xclearcache -silent -Xnosplash
【讨论】:
我的理解是主流的Java缓存技术有3种:
应用缓存是 Java Webstart 和相关浏览器插件的一部分。这可以使用@RuchiraGayanRanaweera 的回答中概述的javaws 命令行工具或Java 控制面板来控制。
AFAIK,javaws 是唯一支持从命令行控制应用程序缓存的方式。
Java 对象缓存框架是 Oracle 的 J2EE 容器产品线(又名 OC4J)的一部分。这在 OC4J 文档中有所描述:"Chapter 9 - Java Object Cache"。 (我认为这不是您要寻找的。)
一些 JVM 实现具有允许编译的类被不同的 JVM 缓存和共享或重用的特性。 IBM Java 和 Eclipse OpenJ9 支持这一点;例如见"Shared class cache"。
但是,这不是标准(免费)Oracle 或 OpenJDK Java 支持的功能。 Java 5 中引入了一个用于共享系统类数据的模糊 JVM 特性,并且存在一个商业特性(从 Java 8 开始)将其扩展到应用程序类。细节很难找到...
更新 - 从 Java 10 开始,Oracle 和 OpenJDK JVM 现在支持 "Class Data Sharing" (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");
它会在清除缓存后向您显示警报。
【讨论】: