我正在学习垃圾收集的工作方式。

我对年轻一代很清楚,但对老一代却不知道

当老一代已经满了并且执行了主要gc时,会发生什么?

是从旧世代中移除所有存活的或死亡的对象,还是仅移除死亡的对象?

如果上一代的所有对象都在主gc时处于活动状态,那会发生什么?它会抛出OutOfMemoryError吗?

最佳答案

年轻一代:大多数新创建的对象都位于此处。由于大多数对象很快变得无法访问,因此许多对象是在年轻一代中创建的,然后消失了。当物体从该区域消失时,我们说发生了“次要GC”。

老一辈:在这里复制那些无法到达并从年轻一代幸存下来的对象。它通常比年轻一代大。由于它的大小较大,因此与年轻一代相比,GC发生的频率降低了。当对象从上一代消失时,我们说发生了“主要GC”(或“完整GC”)。

OldGen:此池基本上包含使用权和虚拟(保留)空间,并且将保存从YoungGen空间进行垃圾回收后幸存的那些对象。

如果旧的版本已满,将抛出OOM

Q & A


当旧的代数已满并且执行了主要的gc时,会发生什么? Objects are removed from memory.

是从旧世代中移除所有存活的或死亡的对象,还是仅移除死亡的对象? only dead objects are removed, objects which are still referenced still live in old

如果上一代的所有对象都是活的,那会发生什么?

Does it throws OutOfMemoryError? OOM will be thrown

关于java - 垃圾收集-老一代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32986647/

10-09 19:29