0
点赞
收藏
分享

微信扫一扫

Java垃圾回收

河南妞 2022-02-12 阅读 82

垃圾回收算法

  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步,如图所示
在这里插入图片描述
6. G1:是一款server端的垃圾回收器,应用在多处理器和大容量内存环境中,实现高吞吐量同时,尽可能满足垃圾收集暂停时间的要求。有以下特性:

  1. 与CMS收集器一样,可以和应用程序线程并发执行
  2. G1增加了内存整理,不会产生内存碎片
  3. G1 STW更可控,在垃圾回收停顿时间上添加了预测机制,用户可以指定期望停顿时间
XX:+UseG1GC
举报

相关推荐

0 条评论