垃圾回收采用可达性分析算法。
强引用 new
软引用 SoftReference OOM之前会被回收 展示图片时。
弱引用 WeakReference GC的时候会被回收 ThreadLocal
虚引用 随时会被回收,回收时会被通知一下。
复制回收
复制回收就是
把可用空间分成相等的两个部分,一半空着。把不可回收的空间复制一份到空着的那一半,之前的那半就可以被清空了。 之前空着的那半就别启用了。
利用率只有一半。
新生代使用
3个区的比例是8:1:1,(eden:from:to)
全部采用复制回收算法(两个区) 90%不需要回收。
空间担保:
标记清除算法
利用率百分百
不用复制
有内存碎片
标记整理算法
利用率百分百
没有内存碎片
需要内存复制
策略
1,首先在Eden区分配
2,大对象直接进入到老年代 (内存担保)
新生代 Minor GC 老年代(内存放不下时触发) FullGC
3,From 与 To 之间相互复制,每次复制 header 头信息的age 加1, 当加到 15(默认设置的参数),就会被放到老年代
4,动态对象年龄判定:当一个对象放入From区 放不下时(不管年龄有没有达到15),就会把整个From区的对象全部放到老年代。
5,空间分配担保(2和4都是基于空间分配担保)。
垃圾回收器
CMS -XX:+UseConcMarkSweepGC
Serial 复制算法 -->Serial Old 标记整理算法 单线程
ParNew 复制算法 并行多线程 --> CMS 标记清除 并行并发
Parallel Scavenge 复制算法 并行多线程 --> Parallel Old 标记整理 并行多线程
G1 跨越新生代和老年代 并行 并发。
网友评论