您的位置:首页 > 编程语言 > Java开发

Java内存回收

2016-07-17 21:52 246 查看

判断对象是否已死

判断算法

引用计数法

可达性分析算法

Java的四种引用

强引用

软引用(还有用但并非必需,二次回收的目标)

弱引用(非必需对象,垃圾回收目标)

虚引用(垃圾回收时收到系统通知)

finalize方法作用

对象被第一次标记时,系统判断其是否需要执行finalize方法,如果对象没有实现finalize方法,或者finalize方法已经执行过,则系统判断为不需要执行。

如果需要执行finalize方法,则开始执行,第二次标记和筛选时判断对象是否成功拯救自己,如果成功拯救,则将其在回收集合中移除,否则进行回收。

垃圾回收算法

标记-清除算法

复制算法

Eden区 8

Survivor区 1

标记-整理算法

分代收集算法

垃圾收集器

ParNew参数

-XX:SurvivorRatio(Eden:Survivor)

-XX:PretenureSizeThreshold 直接晋升老年代的大小

-XX:HandlePromotionFailure 是否允许担保失败

-XX:+UseConcMarkSweepGC(默认使用ParNew)

-XX:+UseParNewGC(强制指定)

Parallel Savenge参数

-XX:GCTimeRatio 设置吞吐量大小

-XX:MaxGCPauseMillis 设置停顿时间

-XX:+UseAdaptiveSizeolicy GC自适应调节策略

CMS回收过程

初始标记->并发标记->重新标记->并发清除

G1回收过程

初始标记->并发标记->最终标记->筛选回收

垃圾回收器参数总结

UseXXXGC(使用XXX回收算法)

SurvivorRatio

MaxTenuringThreshold:晋升老年代的年龄

垃圾回收器工作地点线程数使用算法特点
Serial新生代单线程复制简单高效,stop the worle
ParNew新生代多线程复制Serial的多线程版本
Parallel Savenge新生代多线程复制算法关注吞吐量
Serial Old老年代单线程标记-整理
Parallel Old老年代多线程标记-整理吞吐量优先
CMS老年代标记-清除多线程缩短回收停顿,产生空间碎片
G1整体:标记-整理,局部:复制多线程面向服务器

内存分配与回收策略

对象优先在Eden区分配

空间不够则发起Minor GC

大对象直接进入老年代

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

动态对象年龄判定

如果在Survivor空间中相同年龄所有对象的大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代。

空间分配担保
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jvm