- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要将文件加载到内存中。在我这样做之前,我想确保我的 VM 中有足够的剩余内存。如果不是,我想显示一条错误消息。我想避免 OutOfMemory
异常。
方法:
Runtime.getRuntime().freeMemory()
这行得通吗?您还有其他建议吗?
最佳答案
任何“先检查再做”策略的问题在于,“检查”和“执行”之间可能会发生变化,从而使整个事情变得无用。
“尝试然后恢复”策略几乎总是一个更好的主意,不幸的是,这意味着尝试分配内存并处理异常。即使您执行“首先检查”选项,您仍然应该针对分配可能失败的可能性进行编码。
一个典型的例子是在打开文件之前检查文件是否存在。如果有人在您检查和打开文件之间删除了该文件,无论该文件是否最近才存在,您都会得到一个异常。
现在我不知道为什么您厌恶捕获异常,但我敦促您重新考虑一下。由于 Java 严重依赖它们,因此它们通常被认为是一种很好的做事方式,如果您实际上控制您正在尝试的是什么(例如打开文件或分配内存) .
如果从您的评论看来,您担心内存不足会影响其他线程,那么如果您尝试为文件分配一个大区域,情况就不应该如此。如果你只剩下 400M 而你要求 600,你的请求将失败,但你应该仍然有剩余的 400M。
只有当您费尽心机达到极限(比如尝试 600 次单独的 1M 分配)时,其他线程才会在您完成大约 400 次后开始感到压力。只有当您拒绝时才会发生这种情况赶紧释放这 400 个。
因此,也许有一种可能性是算出您需要多少空间,并确保一次性分配完毕。要么它会起作用,要么它不会。如果没有,您的其他线程也不会变得更糟。
我想您可以使用您建议的方法来尝试确保分配为其他线程留出一些空间(例如 100M 或 10% 或类似的空间),如果您是真的很关心。但我还是会继续尝试。如果您的其他线程由于内存不足而无法完成工作,则有充分的先例告诉用户为 VM 提供更多内存。
关于java - 在分配字节数组之前检查是否有足够的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29534063/
对于我的问题,我找不到更好的措辞。 在我的应用程序中的某个时刻,我设置了一些非常密集的动画。问题是,在高端设备上,动画运行流畅且赏心悦目。另一方面,我测试过的一台低端设备在制作动画时表现非常糟糕。 试
我正在修补 OTP 模块 ( yubico_pam ),并尝试访问管理员选择的控制标志(例如必需,足够, ETC)。 有什么想法吗?这是否可行(无需解析文件)? 最佳答案 无法在 API 中查询此信息
我有一些为 Linux 编写的 C 代码,依赖于套接字和 arpa/inet.h 以及 libusb.h,我想在 MinGW 下为 Windows 编译它。 (请注意,当前项目只有一个非常简单的 Ma
我是一名优秀的程序员,十分优秀!