java 虚拟机垃圾回收和内存分配

一、对象是否存活的判断

1: 引用计数器 (缺点 循环引用)

2: 可达性分析 

二、垃圾收集算法

1、标记清除 ,会产生碎片

2、复制算法 ,划分为大小相等的两块,只能使用一半的内存空间

3、标记整理,通过将存活对象都向一段移动,然后将边界的内存清理

4、分代算法: 新生代使用使用复制算法,老年代使用标记清除和标记整理

hotspot实现算法: 枚举根节点、安全点、安全区域 。(只有在安全点和安全区域清理) 

三、7种垃圾收集算法

新生代 : serial 单线程 、parnew (多线程的serial)、parallel(多线程 并行)

老年代:serial old 、parallel old  、CMS (并发 用户线程和gc线程同时进行)、G1收集器

四、内存分配和回收策略

1: 对象优先在eden 分配

2: 大对象直接进入老年待

3: 长期存活的对象进入老年代

4:    如果survior 空间中相同年龄对象大小的总和大于survior一半时,这些对象进入老年代

5: 保证老年代空间可以容纳新生代,不能容纳时,就需要full gc

猜你喜欢

转载自kayak2015.iteye.com/blog/2288393
今日推荐