m3t*_*man 18 java memory garbage-collection jvm out-of-memory
如果堆已满,JVM会抛出一个
OutOfMemoryError
.但是它确保在抛出这样的异常之前总是发生(完全)垃圾收集吗?
这意味着当抛出异常时,内存只有强引用对象(或GC Roots可达)才能满.
编辑:假设Sun JVM - HotSpot正在讨论中.
ass*_*ias 21
在Java的机器规格在6.3节规定(重点煤矿):
OutOfMemoryError
:Java虚拟机实现已用完虚拟或物理内存,并且自动存储管理器无法回收足够的内存来满足对象创建请求.
因此,JVM确实保证它会在抛出OOME之前尝试通过垃圾收集释放内存.
Pet*_*rey 12
车库收集器通常会在抛出OutOfMemoryError之前运行.但是,如果你没有GC,你可能会得到一个OOME
您无法保证已执行完整的垃圾收集,但VM已尝试通过垃圾收集提供足够的内存.您可能已经在OutOfMemoryError类的API文档中找到了:
当Java虚拟机因内存不足而无法分配对象时抛出,垃圾收集器不再提供更多内存.
请注意,在某些情况下,垃圾收集器可以在没有实际尝试丢弃未引用的对象实例的情况下确定没有足够的内存可用.最明显的例子是,如果您尝试一次性分配更多内存(例如,大字节数组),而不是最大堆大小.在这种情况下,可能会抛出OutOfMemoryError而根本不运行垃圾收集器.
归档时间: |
|
查看次数: |
5853 次 |
最近记录: |