java GC

1.内存主要被分为新生代,旧生代,持久代(jdk1.8去除了。改为元空间)
新生代:EDEN区和survivor区,其中survivor区又分为FromSpace和ToSpace,新建的对象都是在新生代分配内存,Deden区不足的时候,会把存活的对象转移到Survivor区。 新生代GC称为MinorGC、YounGC。
旧生代存储新生代多次GC后任然存活的对象,旧生代的GC称为Major GC、full GC
持久代:方法区
2.GC算法
复制:从根节点扫描,将还存活的对象移动到一块空闲的区域,当活着的对象比较少时,复制算法比较高效,适合Eden。
标记清除:该算法采用的方式是从跟集合开始扫描,对存活的对象进行标记,标记完毕后,再扫描整个空间中未被标记的对象,并进行清除。
没有重新整理,所以会产生很多内存碎片。
标记压缩:在标记清除的基础上,进行空闲空间整理,更新其引用对象的指针,但是由于移动,因此成本也增加了
3.垃圾收集器
JVM中,GC是由垃圾回收器执行
串行收集器(Serial GC):适合只有一个处理器的系统,minor GC和majorGC 都是用一个线程回收,回收的时候,需要对所有正在执行的线程暂停。
ParNewGC :基本和Serial GC一致,本质区别是加入了多线程机制,可以与CMS GC配合,可以用于serve
Parallel Scavenge GC扫描和复制过程中采用多线程的方式进行,server默认GC方式。
CMS(concurrent mark sweep)收集器:解决serial GC的停顿问题,高并发,高响应,基于标记清除算法实现
缺点:
a.CMS收集器对CPU资源非常敏感,在并发阶段虽然不会导致用户停顿,但是会占用CPU资源而导致应用程序变慢,总吞吐量下降。
b.CMS收集器无法处理浮动垃圾,可能出现“Concurrnet Mode Failure”,失败而导致另一次的Full GC。
c.CMS收集器是基于标记-清除算法的实现,因此也会产生碎片。
G1收集器:相比CMS收集器有不少改进,基于标记压缩算法,不会产生内存碎片,其次可以比较精确的控制停顿。
Serial Old收集器:是Serial收集器的旧生代版本,同样使用一个单线程执行收集,使用标记压缩
Parallel Old收集器:是parallel Scavenge得老年带版本,多线程,标记压缩
RTSJ收集器:用于java实时编程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值