GC与JVM

本文介绍了Java的垃圾回收机制,包括垃圾定义、定位和常见回收算法。讲解了JVM内存的分代模型,详细阐述了各种垃圾回收器如Serial、ParNew、CMS、G1和ZGC的特点。此外,还讨论了JVM调优的相关参数、工具以及实战技巧,如通过日志解决实际问题。
摘要由CSDN通过智能技术生成

1.什么是辣鸡
没有被引用,或者是没有栈指向,的一堆互相指向对象
申请内存,释放内存
c:malloc free
c++:new delete
java:new 自动内存回收
手动释放内存,容易出现2种类型的问题,1,忘记回收,2.多次回收

2.如何定位辣鸡
1.引用计数(不能解决循环引用的问题)
2.根可达算法,
GC roots根对象,线程栈变量,静态变量,常量池,JNI指针

3.常见的辣鸡回收算法
1.标记清除,找出辣鸡标注成非垃圾 Mark-Sweep
2.拷贝算法,留一半的内存,拷贝已经用过的空间
没有内存碎片,但是浪费空间
3.标记压缩 mark compact 找出辣鸡空间,,将对象放在这些空间,,使内存连续,没有碎片,效率偏低,任何一块挪动都要线程同步

4.jvm内存的分代模型
1.新生代+老年代+metaSpace(装Class,可以设定大小限制,也可以不设置)
2.新生代=eden+2个survivor,minor GC
*YGC (coping算法)大多数对象会被回收,活着的进入s0
*再次YGC,eden+s0-》s1
*再次YGC,eden+s1-》s0
*年龄足够,CMS(6)-.>老年代
2.老年代,oldGC,FGC=major GC

5.垃圾回收器
young Serial(串行回收,单线程) ParNew Parallel Scavenge(并行) stop the world (串,并)
old CMS Serial old parallel old

ParNew 配合CMS并行回收ConcurrentMarkSweep,辣鸡回收和应用程序同时运行,降低stop the world,的时间1
#G1(10ms) ZGC(1ms)
1.8默认的辣鸡回收器Parallel Scavenge(并行)parallel old

6.JVM调优第一步
1.jvm参数分类

标准 :-开头,所有的hotspot都支持
非标准:-X开头,特定版本的hotSpot支持特定命令
不稳定: -XX开头,下个版本可能取消

2,常用:
-XX:+PrintFlagsFinal
设置值(最终生效值)
-XX:+PrintFlagsInitial
默认值
-XX:+PrintCommandLineFlags
命令行参数
在这里插入图片描述
开启压缩指针,,开启对象压缩,开启并行GC

7.根据日志解决实战问题
CMS -三色标记,错标,incremental update(黑变灰色漏B) ,Remark
三色标记算法,分成3种逻辑对象,黑白灰,没有做标记为白对象,正在找成员变量,为灰色,,,成员全部找完了为黑色对象
老年代,并发的辣鸡回收,和应用程序同时运行,降低STW的时间(200ms),只能手工指定,CMS用的标记清除算法,
G1 -三色标记 +SATB
直接把灰色指向白色的指针放入一个栈,里面,下次扫描的时候去栈里面读取,然后看baise有木有被引用,从而确定是不是辣鸡
ZGC-ColoredPointers(颜色指针)

8.jvm调优实战
1.top 列出目前系统之中,对系统资源消耗比较高的程序
2.jps 列出系统之中java的进程
3.jstack 打印线程栈,监测死锁
4.jinfo 看出jvm相关信息
5.jstat -gc 各年代的情况
arthas 阿里开源的工具
1.help 帮助命令
2.dashboard 仪表盘
3.jvm 看出jvm相关信息
4.thread java进程种所有的线程
thread -b 直接检查死锁
5.sc ,sm找出类中的方法
6.trace +方法 跟踪时间
7.monitor 跟踪方法的运行数据
日志文件为5个,,滚动日志,,每个设置为20M,,5个满了,,就覆盖第一个
内存泄漏,,严重内存溢出
8.jmap -histo 2310 | head 20 (jmap在执行期间会对进程产生很大影响,甚至卡顿)

设定参数HeapDump,OOM时候会自动产生堆转储文件(jump)
有多台服务器,停掉这台堆其他服务器不影响
在线定位(小公司不用)
在测试环境中压测

jap 类名,找出当前正式环境所使用的类
阿尔萨斯的redefind 可以实时修改线上内存代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值