gpt4 book ai didi

java - 为异常情况检测 OutOfMemory

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:35:23 26 4
gpt4 key购买 nike

我有一个程序可以为目录(子)树中的每个文件创建一个对象。在磁盘越来越大的今天,没有办法知道会有多少文件,尤其是。不是几年(几个月?)从现在开始。

我的程序不是企业关键的;它是用户分析该子树的工具。所以告诉用户这个环境中没有足够的内存来操作那个子树是可以接受的。他可以通过选择该子树的子树来做他想做的事。

但程序死掉、抛出堆栈跟踪或其他只有程序员喜欢的事情是 Not Acceptable 。我希望程序能给用户一些合理的反馈,并让他控制他对它所做的事情。

我在 StackOverflow 上阅读了一些关于 OOM 异常的帖子,并且主要同意一些观点:设计糟糕的应用程序、内存泄漏等,都是需要考虑的问题。但在这种情况下,我可能有人试图在 10T 磁盘上使用我的工具,该磁盘的文件数量比准备分析的程序多。而且我并没有尝试编写该工具以使其在每个可能的子树上运行。

我看到过可以“像任何其他异常一样”捕获 OOM 的建议;不幸的是,这不是一种可靠的做事方式。当 OOM 被抛出时,某个线程很可能已经死了,我们无法判断它是哪个线程,也无法重新启动它。因此,例如,如果它碰巧是 Swing 的关键,那么我们就不走运了。

所以我目前的想法是,我的程序将需要偶尔(至少)查看可用的可用内存量,如果低于某个阈值则自行停止。我可以测试事物以确定一个阈值,该阈值允许我输出一个带有消息的对话框,然后删除我对我的对象的所有引用。

但如果我遗漏了什么,或者有更好的方法来处理事情,我想知道。

最佳答案

查看我的帖子 here .为什么不在填充树时计算 freeMemory,并在某个(可能是用户可配置的)点停止,例如:90% 的堆占用。您真的应该尽量使为每个文件创建的对象尽可能小。您能否粘贴此数据结构的代码,以便我们对其进行评论并查看是否可以将其做得更小?也许你并不需要直接拥有一个对象,而是一个可以根据请求获取相关信息的代理对象。

关于java - 为异常情况检测 OutOfMemory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8549645/

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