这些是大部分应用难以满足的硬性前提条件。如果不符合这些条件,尝试从OOME中恢复很可能会使应用程序处于比退出并重新启动更糟糕的状态。
是的。垃圾回收会在OutOfMemoryError
之前运行,并且它会继续工作。
OOME与其他错误一样:它意味着运行时可能处于有问题的状态,但这并不会停止Java。因此,当您捕获该错误时,您可以删除一些引用,该错误将消失。
问题当然在于,您无法知道其他代码(例如在另一个线程中)是否需要内存,而您尝试查找要削减的引用,该代码可能会抛出另一个OOME并导致致命错误。
因此,在经过仔细设计的应用程序中,您可以捕获和处理OOME,程序将继续工作并保持正常。
OutOfMemoryError
之后运行:是的,它也会在之前运行。 OutOfMemoryError
不会终止JVM;相反,它被抛出而不是对象分配成功,程序将继续执行。JVM继续运行,包括垃圾回收。OutOfMemoryError
时释放它,以便有足够的空间完成并进行有序关闭。这要求GC继续运行。http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/OutOfMemoryError.html