Java垃圾回收

垃圾回收算法

  1. 引用计数法:无法解决循环引用,java不采用
  2. 复制算法:年轻代算法
  3. 标记清除:
  4. 标记整理:

垃圾回收方式

  1. Serial:串行。为单线程环境设计且只使用一个线程进行垃圾回收,会暂停用户线程,不适合服务器环境
  2. Parallel:并行。多个垃圾收集线程进行垃圾回收,用户线程短暂暂停,适用于科学计算/大数据平台等弱交互场景
  3. CMS:并发。用户线程和垃圾回收线程同时执行(不一定是并行,可能是交替执行),不用暂停用户线程,适用于对响应时间有要求的场景,互联网公司多采用此方式,缺点是老年代垃圾回收采用标记清除方法,会产生内存碎片,并发执行也会对服务器内存造成更大压力
  4. G1:

查看默认垃圾回收器

java -XX:+PrintCommandLineFlags -version

7大垃圾回收器

  1. Serial:新生代串行垃圾回收器,新生代使用复制算法,老年代使用标记整理算法。适用于单线程环境,现在生产环境很少使用。使用此回收器老年代默认激活SerialOld回收器
-XX:+UseSerialGC
  1. SerialOld:老年代串行垃圾回收器。java8以后不再使用,使用此回收器新生代默认激活Serial回收器
-XX:+UseSerialOldGC
  1. ParNew:新生代并行垃圾回收器,新生代使用复制算法,老年代使用标记整理算法。最常用场景是配合老年代CMS GC工作,是许多java虚拟机运行在server模式下默认的新生代垃圾回收器。命令行如果只配置此垃圾回收器,那么老年代默认会使用Serial Old垃圾回收器,官方不再推荐这种组合
-XX:+UseParNewGC
  1. Parallel:新生代并行垃圾回收器。简单来说就是Serial垃圾回收器的并行化,适用于在后台运行弱交互的程序。它关注的是吞吐量,吞吐量=程序运行时长/(程序运行时长+垃圾回收时长)。自适应调节策略是Parallel收集器和Parnew收集器的一个重要区别,虚拟机会根据当前系统运行情况收集监控信息,动态调整参数来获得最合适的GC停顿时间和吞吐量。使用此回收器老年代默认激活ParallelOld回收器
-XX:+UseParallelGC
  1. ParNewOld:老年代并行垃圾回收器。使用此回收器新生代默认激活Parallel回收器
-XX:+UseParallelOldGC
  1. CMS:并发垃圾回收器。新生代使用复制算法,老年代使用标记清除算法,是一种以获取最短回收停顿时间为目标的垃圾回收器。在G1出现之前,是大型互联网应用首选垃圾回收器。使用此回收器新生代默认激活ParNew回收器
-XX +UseConcMarkSweepGC

CMS标记清除过程分4步,如图所示
在这里插入图片描述
7. G1:区域化垃圾回收器,整体上采用标记整理算法,局部采用复制算法。应用在多处理器和大容量内存环境中,实现高吞吐量同时,尽可能满足垃圾收集暂停时间的要求。有以下特性:

  • 与CMS收集器一样,可以和应用程序线程并发执行
  • G1增加了内存整理,不会产生内存碎片
  • G1 STW更可控,在垃圾回收停顿时间上添加了预测机制,用户可以指定期望停顿时间
    G1垃圾回收器不再从物理上区分Eden、Survivor、Tenured区,将整个内存区分成了N个大小一样的region。但在逻辑上保留了新生代和老年代,也就是说随着G1运行,每个region会在不同代之间进行切换
XX:+UseG1GC
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值