01 2022 档案
摘要:对象内存分配流程图 3.1 栈上分配 Java对象都是在堆上进行分配,在对象没有被引用时,依赖GC回收内存。当对象数量过多,便会给GC带了较大压力,影响应用性能。JVM提供了栈上分配机制,用于减少临时对象在堆上的分配数量。 JVM通过逃逸分析确定该对象不会被外部访问。如果不会逃逸,可以优化对象内存分
阅读全文
摘要:2 Java对象内存模型 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、 实例数据(Instance Data)和对齐填充(Padding)。 在 JVM 中,Java对象保存在堆中时,由以下三部分组成: 对象头(object header):包括了关于堆
阅读全文
摘要:1 对象的创建 对象创建的主要流程: 1.类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 new指令对应到语言层面上讲是,new关键词、对象克
阅读全文
摘要:本文仍然基于JDK8版本,从JDK9模块化器,类加载器有一些变动。 0 javac编译 java代码 public class Math { public static final int initData = 666; public static User user = new User(); p
阅读全文
摘要:1 CPU使用率过高问题定位 1.1 配合使用top+jstack定位(重要) 首先使用top找到CPU使用率最高的进程。 接着查看36032进程的线程情况。 top -Hp 36032 找到36044线程CPU占用率最高,然后将线程号转为16进制。 # printf %x 36044 8ccc 最
阅读全文
摘要:垃圾收集器:利用垃圾收集算法,实现垃圾回收的实践落地。 1 HotSpot垃圾回收器 HotSpot垃圾回收器有多个,可以配合使用。 1.1 垃圾回收的一些术语 术语: Stop the world 简写为STW,也叫全局停顿,Java代码停止运行,native代码继续运行,但不能与JVM进行交互。
阅读全文