Java GC垃圾收集器

Java GC垃圾收集器

概述

关于JavaGC,有三件事情需要了解
1.那些内存需要回收
2.什么时候回收
3.这么回收

##这么判断对象已死

引用计数法

用一个计数器表示对象的引用,对象被引用就+1,,引用失效-1.不过这个
算法有一个问题,就是对象的相互引用,会使对象无法回收。比如A引用B,
B引用A,这两个对象实际上已经没用了,但是无法回收。现在的虚拟机都
不会通过该算法来判断对象

###可达性分析算法

这个算法通过一系列称为"GC Roots"的对象作为起始点,当一个对象到
GC Roots没有任何引用链相连时,则证明该对象没用了。
"GC Roots"包括:
1.虚拟机栈引用对象(局部变量表)
2.方法去静态属性引用对象
3方法去中常量引用的对象
4,本地方法栈中JNI引用对象
具体结构如下图


##垃圾回收算法
###标记-清除算法

如同名字一样,分为标记和清除两步,这是最基本的收集算法,其他算法都
是基于这个思路并且优化的。这算个标记和清除效率都不高,而且清除完后
有很多不连续的内存碎片。

如图

###复制算法

就是将内存一分为二,将存活的对象复制到另一半,将原来的对象全部删除。
这个算法很浪费内存,浪费了一半的内存。
现在商业的虚拟机新生代都是采用这个算法但并不是1:1的比例,实际比例8:1,
会划分为一个eden和两个Survivor空间,将eden和其中一个Survivor中存活的复制
到另一个Survivor中,空间不足时以来老年代进行分配担保

如图:

###标记-整理算法

与清除一样,只是不直接清除,是先将存活的对象向一端移动,然后清理
掉边界之外的内存

如图

分代收集算法

将内存分为新生代、老年代和永生代三个区域,新生代因为每次会有大量
对象死去,使用复制算法,老年代存活率高,没有多余空间对它进行分配
担保,使用标记-清理或者标记-整理算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值