JVM_2 GC截图版

GC

使用jvisualvm工具,并在该工具中安装visualgc插件。运行idea中的java工程,即能模拟以下gc情况,如图。
在这里插入图片描述

在这里插入图片描述
上述设计不合理,会有碎片问题。

在这里插入图片描述
怎么知道对象的年龄呢? 对象头中会有记录的(见前文的图片)
young存满了,又会young gc,又有碎片问题。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
young会gc,没有eden或S0 S1 gc的概念。

在这里插入图片描述
一旦 OLD区都没有空间了,就会OOM。

在这里插入图片描述
在这里插入图片描述

算法:
在这里插入图片描述

【标记-清除】 会扫描整个堆,比较耗时。会产生大量不连续的空间。
在这里插入图片描述
【标记-整理】:比较耗时
在这里插入图片描述
【标记-复制】像s0,s1那样,分出一半空间,将活的复制到另外一半。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上边的英文告诉了怎么选择GC种类。内存比较少<100M或单核就用serial。CMS和G1停顿时间最少。


适用于young和old的收集器的可以的选择如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
CMS和G1很重要,理解下
CMS适用于老年代。G1适用于新生和老年。

serial收集示例,要暂停其他线程。stop the world 即STW。垃圾回收线程暂停课用户线程。
在这里插入图片描述
serial算法是对【标记-复制】算法的落地。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
cms:
在这里插入图片描述
【初始标记】为什么要stw呢?因为要确定根节点,所以暂停业务代码。单线程即可,非常快的过程。
【并发标记】只是增量标记。
【重新标记】又会stw。为什么多线程呢?因为前一步多线程的线程池已经开了,开销已经在了。

G1:现在主流在用。能设置停顿时间。G1是jdk7引入的。
解决CMS不能解决的。
在这里插入图片描述

在这里插入图片描述
G1的区域是逻辑划分的。old去可能变eden,eden也可能变eden。并发标记。

【并发标记算法】:三色指针。 标记垃圾,解决错标、漏标问题。 CMS采用的就是这个。

在这里插入图片描述
在这里插入图片描述

G1是加入了写屏障。


另外:jdk11中新增了 ZGC回收器。

缺点:java任何GC都会stop the world即停顿。

在这里插入图片描述
【生产环境如何选择GC呢】
在这里插入图片描述
为什么公司一般不调呢?因为一般加机器内存了~~。

命令截图版

arthas

在这里插入图片描述
在这里插入图片描述

工具:arthas
在这里插入图片描述
在这里插入图片描述
进入arthas后,几个常用命令:

  1. help
  2. dashboard 概览
  3. jvm 对应jinfo命令
  4. thread 或 thread 对应jstack
  5. thread -b 查看阻塞线程或者死锁

arthas其他高级命令:

  1. jad your_classname 看某个类的源码,反编译某个类。可以查看当前线上版本的原代码。
  2. redefine your_class 热更新class,不用重启线上服务,直接将编译好的某个类换掉。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.怎么改线程池名称?
必须要自定义线程工厂。线程工厂有7个参数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值