如何帮助垃圾收集器更好的工作:收集器采用的策略

文章详细介绍了Java垃圾收集器的选择策略,如Epslion收集器适用于快速内存分配的场景,以及各种内存分配和回收策略,包括对象优先在Eden分配,大对象直接进入老年代,长期存活对象晋升,动态年龄判定和空间分配担保等机制,确保高效且稳定的内存管理。
摘要由CSDN通过智能技术生成


前言

本文主要介绍垃圾收集器采用的各种策略来帮助自己进行更高效的垃圾收集。


1.收集器选择策略

1.1 Epslion收集器

该收集器根本没有收集垃圾的功能,但是垃圾收集器的功能不止是它名字表现的那样,他还有内存分配和管理、与虚拟机的协作等作用,这些也都是很重要的。该收集器可以运用于那些需要在数秒钟之内就能分配好内存的微服务应用,Epslion收集器就是最好的选择。

1.2 收集器权衡

数据分析,科学计算类的任务,吞吐量是关键
SLA应用,停顿时间是关键
嵌入式和客户端,垃圾所在内存是关键,需要快速清理掉垃圾。

2. 内存分配和回收策略

2.1 Eden率先分配

产生的新对象优先分配到Eden中,当Eden快满的时候采用一次MinorGC回收新生代Eden的垃圾。

2.2 大对象直接进入老年代

因为大对象很大可能会到达新生代的最大存储临界区,频繁触发MinorGC,增大开销。且大对象如果一直存活,在新生代常采用的标记复制算法的复制阶段也会开销甚大,所以直接进入老年区。

2.3 长期存活对象进入老年代

新生代在熬过第一次MinorGC后,就可以被复制到Survivor区(如果容纳的下的话),新生代的对象每熬过一次MinorGC年龄便会+1,可以通过参数设置年龄阈值,规定到达多少年龄的对象进入老年代。

2.4 动态对象年龄判定

不一定所有对象一定要到达年龄阈值才能进入老年代,当Survivor区中相同年龄的对象大小总和到达一半的时候就,大于这个年龄段的可以进入老年代

2.5 空间分配担保

Survivor不一定能容得下抗住MinorGC的对象,这个时候为了保证这些容不下的对象无处可去,老年代需要做空间分配的担保
当老年代连续空闲空间大于新生代所有空间时,下一次MinorGC是安全的。
如果不大于,那么看取每次MinorGC后转入老年代的平均值,大于这个平均值,也可以,但仍然是赌博

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值