
这时候会触发一次Minor GC,把Eden区中还存活的对象转移到From区(年龄+1为1),其他对象则视为垃圾被清理掉。然后在Eden区中给新创建的那个对象分配空间。
这时会再次触发Minor GC,把Eden区和From区中存活的对象转移到To区(年龄+1为2),清理掉剩下的垃圾对象,然后在Eden区给新对象分配内存:
如果某个(些)对象(原来在年轻代中存活的对象或者新创建的对象)需要被移动到老年代中,而老年代中没有足够空间容纳这个(些)对象,那么会触发一次Full GC,Full GC会对整个堆进行清理,如果Full GC后还是无法在老年代中给这个(些)对象分配空间,那么JVM会抛出OutOfMemoryError,即OOM。
https://www.jianshu.com/p/314272e6d35b
https://blog.csdn.net/u011069294/article/details/107346634
gc是指垃圾回收机制,当一个对象不能再被后续程序所引用到时,这个对象所占用的内存空间就没有存在的意义了,java虚拟机会不定时的去检测内存中这样的对象,然后回收这块内存空间。
GC的基本原理:
对于程序员来说,用new关键字即在堆中分配了内存,我们称之为“可达”。对于GC来说,只要所有被引用的对象为null时,我们称之为“不可达”,就将进行内存的回收。
当一个对象被创建时,GC开始监控这个对象的大小、内存地址及使用情况。GC采用有向图的方式记录和管理堆(heap)中的所有对象,通过这种方式可以明确哪些对象是可达的,哪些不是。当确定为不可达时,则对其进行回收。
保证GC在不同平台的实现问题,java规范对其很多行为没有进行严格的规定。对于采用什么算法,什么时候进行回收等。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)