JVM在进行GC时,并不是对这三个区域统一回收,大部分时候,回收都是新生代~
- 新生代
- 幸存区
- 老年区
GC两种类:轻GC(普通的GC),重GC(全局GC)
GC面试题:
- JVM的内存模型和分区~详细到每个区放什么?
- 堆里面的分区有哪些?Eden , from ,to ,老年区 ,说说他们的特点?
- GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数器,怎么用的?
- 轻GC和重GC分别在什么时候发生?
引用计数法:
把使用0次的对象GC掉!
复制算法
如果两个幸存区都有一个,就将其中一个复制给另一个,空的为to,必须确保其中一个为空。
- 好处:没有内存碎片~
- 坏处:浪费了内存空间,多了一半空间永远是空to,假设对象100%存活(极端情况)
复制算法最佳使用场景:对象存活率较低的时候:新生区~
标记清除压缩算法
多几次标记清除,再压缩