垃圾回收器是否保证在内存不足错误之前运行?
2022-09-02 19:46:07
如果堆已满,JVM 会抛出一个 OutOfMemoryError
。但是,是否可以确保在引发此类异常之前始终进行(完整)垃圾回收?
这意味着在引发异常时,内存仅包含强引用对象(或可由 GC 根目录访问)而已满。
编辑:假设太阳JVM - HotSpot正在讨论中。
如果堆已满,JVM 会抛出一个 OutOfMemoryError
。但是,是否可以确保在引发此类异常之前始终进行(完整)垃圾回收?
这意味着在引发异常时,内存仅包含强引用对象(或可由 GC 根目录访问)而已满。
编辑:假设太阳JVM - HotSpot正在讨论中。
Java机器规范在第6.3节(强调我的)中指出:
OutOfMemoryError
:Java 虚拟机实现的虚拟内存或物理内存已用完,并且自动存储管理器无法回收足够的内存来满足对象创建请求。
因此,JVM确实提供了保证,在抛出OOME之前,它将尝试通过垃圾回收来释放内存。
垃圾回收器通常会在抛出内存错误之前运行。但是,如果您没有GC,您可能会得到一个OOME。