GarBage Collector And GC tuning垃圾回收和调优(一)

文章介绍了Java中的垃圾回收机制,包括垃圾的定义、两种找寻垃圾的算法(引用计数和根可达)、三种主要的垃圾清除算法(标记清除、拷贝、标记压缩),以及堆内存的新生代和老年代逻辑分区。此外,讨论了对象如何进入老年代、栈上分配策略,和几种常见的垃圾回收器如Serial、ParallelScavenge、CMS等及其特点。CMS的主要问题在于碎片化和浮动垃圾。
摘要由CSDN通过智能技术生成

1.什么是垃圾

  •  没有引用指向的一个对象或一堆对象

 2.垃圾怎么找到它

  • 两种算法:1.Reference Count(引用技术)
  •                   2.Root Seaching(根可达算法)

3.GC常用垃圾清除算法(3种)

  • 标记清楚:有碎片,效率偏低,位置不连续(两遍扫描)

  • 拷贝算法:浪费空间,没有碎片, 

  • 标记压缩:效率偏低,没有碎片,也不会浪费空间(效率偏低,指针需调整) 

 4.堆内存逻辑分区

        新生代:新new出来的对象都在,分为伊甸区(刚诞生的对象)和survivor(幸存)区(回收一次跑到这回收一次跑到这)(默认8:1:1),因为新生代活着的对象比较少,大量对象死去,所以用拷贝算法。

        老年代:冥顽不固,回收不掉的对象都在这(新老:1比3),因为存活对象比较多,采用标记清除或者标记压缩算法。

5.栈上分配

6.对象如何进入老年代 

         伊甸区+S1——》进行YGC的时候,拷贝的对象超过S2对象的一半了,那么把这些年龄最大的对象直接放进老年代

 分配担保:YGC的时候survivor空间不够了,分配担保直接进入老年代

7.常见的垃圾回收器 

Serial;Serial Old(safe point)一旦开始回收,安全停止掉其它线程,清完后,其他线程继续工作

Paralle Scavenge; Parallel Old(默认)与Serial唯一区别就是多线程清理垃圾

CMS;ParNew(Paralle Scavenge新版本)做了增强,以后便于CMS配合使用的变种

以上都能组合并且逻辑和物理上都分新生代和老年代

Serial:单线程

Paralle Scavenge:多线程

G1:逻辑上分新生代和老年代,物理上不区分

CMS:四个阶段

8.CMS的问题 

 MARK Sweep 天生问题(碎片化)

  • 1. 碎片太多,老年代满满了,新来的对象没地方放了
  • 2.浮动垃圾
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值