是否有可能在java中捕获内存不足?

我正在开发一个需要大量内存的程序,我想在发生内存不足异常时捕获。我听说这是不可能做到的,但是如果在这方面有任何发展,我很好奇。



慕田峪9158850
浏览 496回答 3
3回答

SMILET

这不是例外; 这是一个错误:java.lang.OutOfMemoryError从Throwable下降时你可以捕获它:try {    // create lots of objects here and stash them somewhere} catch (OutOfMemoryError E) {    // release some (all) of the above objects}但是,除非你正在做一些相当具体的事情(比如在特定的代码段中分配大量的东西),否则你可能无法捕获它,因为你不知道它会从哪里被抛出。

天涯尽头无女友

您可以捕获并尝试从OutOfMemoryError(OOM)异常中恢复,但这可能是一个糟糕的想法 ...特别是如果您的目标是让应用程序“继续”。有许多的原因:正如其他人所指出的那样,有更好的方法来管理内存资源而不是明确地释放内容; 即对内存较短时可以释放的对象使用SoftReference和WeakReference。如果你等到实际耗尽内存之前你的应用程序,你的应用程序可能会花更多的时间来运行垃圾收集器。根据您的JVM版本和GC调整参数,JVM可能会越来越频繁地运行GC,因为它接近抛出OOM的点。减速(就应用程序做有用的工作而言)可能很重要。你可能想避免这种情况。如果您的问题的根本原因是内存泄漏,那么从OOM捕获和恢复的可能性将无法回收泄漏的内存。您的应用程序将再次持续一段时间,然后再次,并再次以不断减少的间隔。所以我的建议是不要试图继续从OOM出发...除非你知道:OOM发生的地点和原因,没有任何“附带损害”,并且您的恢复将释放足够的内存以继续。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java