JVM调优学习之路
文章平均质量分 93
JVM调优学习之路
PoetryAndTheDistance
三年Java后端,一年数据。一年交付。没别的爱好,只是喜欢啃骨头。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
八:JVM调优实战及常量池详解
目录 阿里巴巴Arthas详解 Arthas使用场景 Arthas使用 GC日志详解 如何分析GC日志 CMS G1 JVM参数汇总查看命令 Class常量池与运行时常量池 字符串常量池 字符串常量池的设计思想 三种字符串操作(Jdk1.7 及以上版本) 字符串常量池位置 字符串常量池设计原理 String常量池问题的几个例子 关于String是不可变的 八种基本类型的包装类和对象池 阿里巴巴Arthas详解 Arthas是Alibaba在 2018 年 9 月...转载 2021-05-19 21:02:08 · 935 阅读 · 0 评论 -
七:JVM调优工具详解及调优实战
目录 JVM调优工具详解 前置启动程序 Jmap 堆信息 堆内存dump 可以用jvisualvm命令工具导入该dump文件分析 Jstack 远程连接jvisualvm jstack找出占用cpu最高的线程堆栈信息 Jinfo Jstat 垃圾回收统计 堆内存统计 新生代垃圾回收统计 新生代内存统计 老年代垃圾回收统计 老年代内存统计 元数据空间统计 JVM运行情况预估 内存泄露到底是怎么回事 demo代码下载:jvm-full-gc.zip JVM调优工.转载 2021-05-19 20:42:00 · 816 阅读 · 0 评论 -
六:垃圾收集器G1&ZGC详解
目录 G1收集器(-XX:+UseG1GC) G1垃圾收集分类 YoungGC MixedGC Full GC G1收集器参数设置 G1垃圾收集器优化建议 什么场景适合使用G1 每秒几十万并发的系统如何优化JVM ZGC收集器(-XX:+UseZGC) ZGC目标 不分代(暂时) ZGC内存布局 NUMA-aware ZGC运作过程 颜色指针 为什么有2个mark标记? 颜色指针的三大优势: 读屏障 ZGC存在的问题 解决方案 ZGC参数设置 ZGC触发时机转载 2021-05-18 21:03:09 · 806 阅读 · 0 评论 -
五:垃圾收集器ParNew&CMS与底层三色标记算法详解
目录 垃圾收集算法 分代收集理论 标记-复制算法 标记-清除算法 标记-整理算法 垃圾收集器 Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC) Parallel Scavenge收集器(-XX:+UseParallelGC(年轻代),-XX:+UseParallelOldGC(老年代)) ParNew收集器(-XX:+UseParNewGC) CMS收集器(-XX:+UseConcMarkSweepGC(old)) 亿级流量电商系统如何优化转载 2021-05-18 20:45:35 · 586 阅读 · 0 评论 -
四:class文件结构(简单class文件)
目录 一:源代码 二:通过我们javap -verbose TulingByteCode .class反编译 三:class文件通过16进制查看器打开如下 四:Class文件结构访问标识符号解析 Access_flag 五: This class name的描述当前的所属类 第六部分: super class name (当前class的父类名字) 第七部分:接口信息(**标注 我们的当前class没有实现接口为了演示效果我用的另外一个类演示) 这个类我们实现了二个接口 分别为ITulingI原创 2021-05-18 20:28:09 · 760 阅读 · 0 评论 -
三:JVM对象创建与内存分配机制深度剖析
目录 对象的创建 1.类加载检查 2.分配内存 划分内存的方法: 解决并发问题的方法: 3.初始化零值 4.设置对象头 5.执行方法 对象内存分配 对象栈上分配 对象在Eden区分配 大对象直接进入老年代 长期存活的对象将进入老年代 对象动态年龄判断 老年代空间分配担保机制 对象内存回收 引用计数法 可达性分析算法 常见引用类型 finalize()方法最终判定对象是否存活 如何判断一个类是无用的类 对象的创建 对象创建的主要流程: 1.类加载检查 .转载 2021-05-17 22:32:51 · 433 阅读 · 0 评论 -
jvisualvm安装Visual GC插件
目录 1、找到新的更新地址 2、进入jvisualvm的插件管理 3、安装VisualGC插件 4、重启即可看到VisualGC 5、VisualGC 1、找到新的更新地址 visualvm新访问地址:https://visualvm.github.io/index.html 进入“Plugins”,找到对应自己JDK版本的更新地址 2、进入jvisualvm的插件管理 "工具" - "插件" 在"设置"中修改url地址为刚才我们在github上找到的对应.原创 2021-05-17 22:07:49 · 756 阅读 · 3 评论 -
JVM指令手册
目录 栈和局部变量操作 将常量压入栈的指令 从栈中的局部变量中装载值的指令 将栈中的值存入局部变量的指令 通用(无类型)栈操作 类型转换 整数运算 逻辑运算 移位操作 按位布尔运算 对象和数组 对象操作指令 控制流 条件分支指令 比较指令 无条件转移指令 表跳转指令 异常 方法调用与返回 方法调用指令 方法返回指令 JVM指令助记符 操作数栈到变量: 常数到操作数栈: 从操作数栈存存储到数组: 栈和局部变量操作 将常量压入栈的指令 aconst_n原创 2021-05-17 21:43:22 · 592 阅读 · 0 评论 -
二:JVM内存模型深度剖析与优化
目录 一、JDK体系结构 Java语言的跨平台特性 JVM整体结构及内存模型 二、JVM内存参数设置 一、JDK体系结构 Java语言的跨平台特性 JVM整体结构及内存模型 补充一个问题: 在minor gc过程中对象挪动后,引用如何修改? 对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象转载 2021-05-17 21:36:01 · 387 阅读 · 0 评论 -
一:从JDK源码级别彻底剖析JVM类加载机制
类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM。 package com.tuling.jvm; public class Math { public static final int initData = 666; public static User user = new User(); public int compute() { //一个方法对应一块栈帧内存区域 int a = 1;转载 2021-05-17 21:27:56 · 527 阅读 · 0 评论
分享