gpt4 book ai didi

java - 通过 File.deleteOnExit 清理排队等待删除的文件

转载 作者:行者123 更新时间:2023-12-02 11:52:24 24 4
gpt4 key购买 nike

我有一些library code使用 File.deleteOnExit() 。由于这段代码在我的应用程序中被多次调用,内存不断堆积在 DeleteOnExitHook 中。 。这会导致我的堆无限增长并最终导致 OutOfMemoryErrors。由于该类完全受到包保护,因此似乎有一种简单的机制可以中间删除排队等待删除的文件。我可以用一些反射魔法把这个列表清空吗?

最佳答案

据我所知,你需要一个肮脏的黑客,所以这应该足够了。您需要恢复 files 字段值,以便正常关闭(或下次使用此黑客时)正常工作。

注意:将删除所有内容,包括其他库安排的文件。请务必检查它在您的情况下是否安全。

    java.lang.reflect.Method  run   = Class.forName ("java.io.DeleteOnExitHook").getDeclaredMethod ("runHooks");
java.lang.reflect.Field files = Class.forName ("java.io.DeleteOnExitHook").getDeclaredField ("files");

run.setAccessible (true);
files.setAccessible (true);

run.invoke (null);
files.set (null, new java.util.LinkedHashSet <String> ());

或者,只需检索计划的文件

    files.get (null)

迭代集合并手动删除文件,同时从集合中删除名称。这样您就可以决定自己删除哪些文件。

关于java - 通过 File.deleteOnExit 清理排队等待删除的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47792708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com