
JVM
文章平均质量分 62
皮皮皮的代码
一点点来
展开
-
JVM-CPU100%
1. 介绍 1.1 排查步骤 查消耗cpu最高的进程PID 根据PID查出消耗cpu最高的线程号 根据线程号查出对应的java线程,进行处理 1.2 Linux top -c:显示进程运行信息列表。按下P,进程按照cpu使用率排序 top -Hp「pid」:显示一个进程的线程运行信息列表。按下P,进程按照cpu使用率排序 printf "%x\n" 「pid」:线程号是10进制,在堆栈信息中,线程号是16进制,因此可以先通过命令转换为16进制 jstack 「pid」原创 2021-07-22 16:51:41 · 4288 阅读 · 0 评论 -
JVM-垃圾收集器
1. 介绍 1.1 为什么需要垃圾收集器 堆中存放着正在运行的JAVA程序所创建的所有对象,例如使用new指令创建对象。但是没有明确代码来释放它们,垃圾收集就是自动释放不再被程序使用的对象的过程。 1.2 如何判断垃圾对象 引用计数法 缺点:循环引用问题 可达性分析法 GCroot结点开始向下搜索,路径称为引用链,当对象没有任何一条引用链链接的时候,就认为这个对象是垃圾,并进行回收。如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的。要注意的是,不可达对象不等价于可回收对象原创 2021-01-28 17:45:20 · 173 阅读 · 0 评论 -
JVM-类加载
1. 类加载过程 加载:类的class文件读到内存,并为之创建一个java.lang.class对象 验证:文件格式验证、元数据验证、字节码验证、符号引用验证 准备:为类的静态变量分配内存,并设置默认初始值,例如int默认为0 解析:将类的二进制数据中的符号引用替换成直接引用 初始化:为类的静态变量赋予正确的初始值 PS: 符号引用:是以一组符号来描述所引用目标,符号可以是任何的字面形式的字面量; 直接引用:是指向目标的指针,偏移量或者能够直接定位的句柄。 2. 类加载时机..原创 2020-07-13 22:30:12 · 161 阅读 · 0 评论 -
JVM-栈
1. 什么是JAVA栈? 每当启动一个线程时,JAVA虚拟机都会为它分配一个JAVA栈。虚拟机栈只会直接对JAVA栈执行两种操作:以帧为单位的压栈和出栈。 2.什么是栈帧? 栈帧由三部分组成:局部变量区、操作数栈、帧数据区。 3.JAVA栈的压栈和出栈 示例: 1.JVM自动寻找main方法,执行第一句代码,创建一个Test类的实例,在栈中分配一块内存,存放一个指向堆区对象的指针110925。 2.创建一个int型的变量date,由于是基本类型,直接在栈中存放date对应的值9。 3.创建两...原创 2020-07-09 23:06:42 · 299 阅读 · 0 评论 -
JVM-堆
1. 什么是堆 堆是用来存储数组和类实例信息的 2.堆空间设计 (1)句柄池 + 对象池 句柄池包含指向对象实例的指针以及指向方法区中类数据的指针, 对象池则是对象实例数据 (2)对象指针直接指向一组数据,而该数据包含对象实例数据以及指向方法区中类数据的指针 两种对象的访问方式各有优势,使用句柄访问方式的最大好处就是reference中存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference本...原创 2020-06-23 23:59:53 · 579 阅读 · 0 评论