gpt4 book ai didi

java - 在分配字节数组之前检查是否有足够的内存

转载 作者:搜寻专家 更新时间:2023-11-01 01:51:26 24 4
gpt4 key购买 nike

我需要将文件加载到内存中。在我这样做之前,我想确保我的 VM 中有足够的剩余内存。如果不是,我想显示一条错误消息。我想避免 OutOfMemory 异常。

方法:

  1. 获取我的文件的文件大小
  2. 使用Runtime.getRuntime().freeMemory()
  3. 检查是否合适

这行得通吗?您还有其他建议吗?

最佳答案

任何“先检查再做”策略的问题在于,“检查”和“执行”之间可能会发生变化,从而使整个事情变得无用。

“尝试然后恢复”策略几乎总是一个更好的主意,不幸的是,这意味着尝试分配内存并处理异常。即使您执行“首先检查”选项,您仍然应该针对分配可能失败的可能性进行编码。

一个典型的例子是在打开文件之前检查文件是否存在。如果有人在您检查和打开文件之间删除了该文件,无论该文件是否最近才存在,您都会得到一个异常。

现在我不知道为什么您厌恶捕获异常,但我敦促您重新考虑一下。由于 Java 严重依赖它们,因此它们通常被认为是一种很好的做事方式,如果您实际上控制您正在尝试的是什么(例如打开文件或分配内存) .


如果从您的评论看来,您担心内存不足会影响其他线程,那么如果您尝试为文件分配一个大区域,情况就不应该如此。如果你只剩下 400M 而你要求 600,你的请求将失败,但你应该仍然有剩余的 400M。

只有当您费尽心机达到极限(比如尝试 600 次单独的 1M 分配)时,其他线程才会在您完成大约 400 次后开始感到压力。只有当您拒绝时才会发生这种情况赶紧释放这 400 个。

因此,也许有一种可能性是算出您需要多少空间,并确保一次性分配完毕。要么它会起作用,要么它不会。如果没有,您的其他线程也不会变得更糟。

我想您可以使用您建议的方法来尝试确保分配为其他线程留出一些空间(例如 100M 或 10% 或类似的空间),如果您是真的很关心。但我还是会继续尝试。如果您的其他线程由于内存不足而无法完成工作,则有充分的先例告诉用户为 VM 提供更多内存。

关于java - 在分配字节数组之前检查是否有足够的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29534063/

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