随笔分类 -  JVM

摘要:彻底搞清楚class常量池、运行时常量池、字符串常量池 常量池-静态常量池 也叫 class文件常量池,主要存放编译期生成的各种字面量(Literal)和符号引用(Symbolic References)。 字面量:例如文本字符串、fina修饰的常量。 int b = 2; int c = "abc 阅读全文
posted @ 2022-02-10 23:06 Awecoder 阅读(5187) 评论(1) 推荐(1) 编辑
摘要:1 JDK8打印并分析GC日志 1.1 打印日志 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+UseSerialGC -Xmx1m -Xloggc:./gc-serial.log 参数 功能 -XX:+ 阅读全文
posted @ 2022-02-09 09:34 Awecoder 阅读(3296) 评论(0) 推荐(1) 编辑
摘要:JVM参数选项 # 查看标准选项 java -help # 查看-X选项 java -X # 查看高级选项 -XX java -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsInitial 阅读全文
posted @ 2022-02-09 09:33 Awecoder 阅读(450) 评论(0) 推荐(0) 编辑
摘要:JVM故障运维工具 1 jps 查看进程pid jps 2 jmap 查看堆内存 1 用来查看内存信息,实例个数以及占用内存大小 #查看历史生成的实例 jmap -histo <pid> > ./log.txt #查看当前存活的实例,执行过程中可能会触发一次full gc jmap -histo:l 阅读全文
posted @ 2022-02-08 21:47 Awecoder 阅读(104) 评论(0) 推荐(0) 编辑
摘要:对象内存分配流程图 3.1 栈上分配 Java对象都是在堆上进行分配,在对象没有被引用时,依赖GC回收内存。当对象数量过多,便会给GC带了较大压力,影响应用性能。JVM提供了栈上分配机制,用于减少临时对象在堆上的分配数量。 JVM通过逃逸分析确定该对象不会被外部访问。如果不会逃逸,可以优化对象内存分 阅读全文
posted @ 2022-01-16 23:36 Awecoder 阅读(418) 评论(0) 推荐(0) 编辑
摘要:2 Java对象内存模型 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、 实例数据(Instance Data)和对齐填充(Padding)。 在 JVM 中,Java对象保存在堆中时,由以下三部分组成: 对象头(object header):包括了关于堆 阅读全文
posted @ 2022-01-16 23:35 Awecoder 阅读(342) 评论(0) 推荐(0) 编辑
摘要:1 对象的创建 对象创建的主要流程: 1.类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 new指令对应到语言层面上讲是,new关键词、对象克 阅读全文
posted @ 2022-01-16 23:33 Awecoder 阅读(975) 评论(0) 推荐(0) 编辑
摘要:本文仍然基于JDK8版本,从JDK9模块化器,类加载器有一些变动。 0 javac编译 java代码 public class Math { public static final int initData = 666; public static User user = new User(); p 阅读全文
posted @ 2022-01-09 19:26 Awecoder 阅读(404) 评论(2) 推荐(1) 编辑
摘要:1 CPU使用率过高问题定位 1.1 配合使用top+jstack定位(重要) 首先使用top找到CPU使用率最高的进程。 接着查看36032进程的线程情况。 top -Hp 36032 找到36044线程CPU占用率最高,然后将线程号转为16进制。 # printf %x 36044 8ccc 最 阅读全文
posted @ 2022-01-03 09:23 Awecoder 阅读(417) 评论(0) 推荐(0) 编辑
摘要:垃圾收集器:利用垃圾收集算法,实现垃圾回收的实践落地。 1 HotSpot垃圾回收器 HotSpot垃圾回收器有多个,可以配合使用。 1.1 垃圾回收的一些术语 术语: Stop the world 简写为STW,也叫全局停顿,Java代码停止运行,native代码继续运行,但不能与JVM进行交互。 阅读全文
posted @ 2022-01-02 12:40 Awecoder 阅读(302) 评论(0) 推荐(0) 编辑
摘要:1 什么时候回收垃圾? 1、什么场景下该使用什么垃圾回收策略? 在对内存要求苛刻的场景:想办法提高对象的回收效率,多回收掉一些对象,腾出更多内存。 在CPU使用率高的情况下:降低高并发时垃圾回收的频率,让CPU更多的去执行你的业务而不是垃圾回收。 2、垃圾回收发生在哪些区域? 堆(回收对象)、方法区 阅读全文
posted @ 2021-12-28 23:58 Awecoder 阅读(375) 评论(0) 推荐(0) 编辑
摘要:逃逸分析:分析变量是否逃出它的作用域 全局变量赋值逃逸 方法返回值逃逸 实例引用逃逸 线程逃逸:赋值给类变量或者可以在其他线程中访问的实例变量 public class EscapeTest { public static SomeClass someClass; // 1 public void 阅读全文
posted @ 2021-12-26 22:27 Awecoder 阅读(184) 评论(0) 推荐(0) 编辑
摘要:编译器优化机制详解 1 字节码是如何执行的? 主要包含解释执行(由解释器一行一行翻译执行)和编译执行(将字节码编译成机器码,直接执行机器码)。 解释执行:优势在于没有编译的等待时间,性能相对编译执行差。 编译执行:运行效率高,比解释执行快一个数量级;会带来额外的开销(CPU,内存) 查看和切换运行模 阅读全文
posted @ 2021-12-26 17:19 Awecoder 阅读(556) 评论(0) 推荐(0) 编辑
摘要:方法内联的思想是,把目标方法的代码复制代发起调用的方法之中,避免发生真实的方法调用。 public class InlineTest { private static int add1(int x1, int x2, int x3, int x4) { return add2(x1, x2) + a 阅读全文
posted @ 2021-12-26 17:17 Awecoder 阅读(378) 评论(1) 推荐(0) 编辑