jvm性能调优
1.jvm的概念
- 程序计数器:每个线程私有的,保存当前代码运行的行号,线程挂起,恢复后的从之前的代码行执行。
- 字节码执行引擎:修改程序计数器,开启一个后台线程做垃圾回收
- 栈:局部变量
- 堆:对象 元空间(方法区):class字节码文件加载到该区域,主要存静态变量和常量,类信息
- 类装载子系统:装载class文件
- 本地方法栈:存放本地方法(C++)数据存储
2.堆
- 年轻代:eden区,survivor区 minor gc,分带年龄到达15就被分配到老年代
- 老年代:full gc (存放的对象:spring容器的bean,连接池,对象池,静态变量引用的对象)
- STW(垃圾回收要暂停用户线程)
- 进入老年代的对象:长期存活的对象,大对象,动态年龄大于15,对象大小超过survivor区的50% 老年代空间分配担保机制
- gc roots根节点:线程栈的本地变量,静态变量,本地方法栈。通过这些节点开始寻找引用的对象 找到的对象都标记为非垃圾对象,其余未标记的对象是垃圾对象。
3.Arthas
- thread 线程号 找cpu高的代码
- jad 类路径 反编译查看线上代码
4.rocketmq 1秒如何处理10w条消息 大概200m的消息对象
- 大内存32g,minor gc内存大也会慢,使用G1垃圾收集器分区回收