jvm垃圾回收与优化

垃圾回收算法

引用计数(Refrence Counting)

对象有一个引用,即增加一个计数,删除一个引用减少一个计数,无法处理循环引用的问题

复制算法(Copying)

此算法把内存划分为两个空间,每次只使用一个空间,垃圾回收时,遍历当前使用的区域,把正在使用的对象复制到另一个区域,清空当前区域,
缺点:需要使用两倍内存空间

标记清除(Mark-Sweep)

第一阶段 从引用根节点开始标记所有引用对象
第二阶段 遍历整个堆,清除未标记的引用对象

标记整理(Mark-Compact)

第一阶段 从引用根节点开始标记所有引用对象
第二阶段 遍历整个堆,把清除未标记对象并且把存活对象压缩到堆的一块,按顺序排放

其他算法

分代算法 等

垃圾收集器

Scavenge GC (次收集)和full GC(全收集)

Scavenge GC 发生在新生代

Full GC 老年代GC 至少触发一次 Minor GC

次收集

年轻代堆空间紧张会触发
相对于全收集,收集间隔较短

全收集

老年代持久代堆空间满的时候会触发
System.gc 可以显示调用全收集
全收集一般根据堆大小的不同,需要时间不尽相同,调用时间长,但不应超过3-5秒

分代垃圾回收器

young generationtenured generaion
serialcms(concurrent mark sweep)
ParNewSeraial Old
parallel scavengeParallel Old
G1(gabage first)G1(garbage first)

新生代收集器

Serial串行收集器

Serila 实在Hotspot在client模式下默认垃圾收集器,暂停其他所有工作线程(STW
可以使用 XX:+UseSerialGC打开

ParNew并行收集器

  • 多个线程收集
  • 是VM启用CMS收集器 xx:+UseConcMarkSweepGC默认新生代收集器
  • 在单CPU中比不过Serial
  • 收集线程与CPU数量相同

Parallel Scavenge收集器

  • 与ParNew类似
  • 复制算法
  • 并行多线程收集器
  • 关注系统吞吐量
    系统吞吐量 = 系统运行用户代码时间 / 系统运行用户代码时间 + 垃圾处理器时间

老年代收集器

Serial Old收集器

  • 标记-整理算法
  • 单线程收集器

CMS收集器

  • 并发收集器
  • 最短回收停顿时间为目标收集器

分区收集 G1收集器

  • 面向服务端应用的收集器

JVM优化

  • jps
  • jstat
  • jinfo
  • jmap
  • visualvm 插件 visual gc

JVM 参数

  • -Xms 初始化堆大小

  • -Xmx 最大堆大小

  • -XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收

  • -XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发

  • -XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收

  • -XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩

  • -XX:NewRatio:新生代和老年代的比

  • -XX:ParallelCMSThreads:设定CMS的线程数量

  • -XX:ParallelGCThreads:设置用于垃圾回收的线程数

  • -XX:SurvivorRatio:设置eden区大小和survivior区大小的比例

  • -XX:+UseParNewGC:在新生代使用并行收集器

  • -XX:+UseParallelGC :新生代使用并行回收收集器

  • -XX:+UseParallelOldGC:老年代使用并行回收收集器

  • -XX:+UseSerialGC:在新生代和老年代使用串行收集器

  • -XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器

  • -XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理

  • -XX:UseCMSInitiatingOccupancyOnly:表示只在到达阀值的时候,才进行CMS回收

  • -Xms:设置堆的最小空间大小。

  • -Xmx:设置堆的最大空间大小。

  • -XX:NewSize设置新生代最小空间大小。

  • -XX:MaxNewSize设置新生代最大空间大小。

  • -XX:PermSize设置永久代最小空间大小。

  • -XX:MaxPermSize设置永久代最大空间大小。

  • -Xss:设置每个线程的堆栈大小

  • -XX:NewRatio设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4

  • -XX:SurvivorRatio年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值