
jvm专题
享知
Java源码爱好者、熟悉分布式技术、中间件等技术.
格言: 故不积跬步,无已至千里;不积小流,无以成江海;
展开
-
第一章 认识jvm内存分配
1、jvm是如何与java程序之间的通信。 2、class文件是如何java 1、介绍类的加载与回收 我们编程的java程序最终编译.class,然后通过类加载器,加载道内存。当类不没有没引用到就会被垃圾回收器器回收. 2、数据和指令 1 、Java栈是存储的基本数据类型和对象的引用地址,那么对象的地址会存储到寄存 器。 2、内存空间与执行引擎之间是通过数据与指令进行交互。然后执行引擎...原创 2019-09-22 16:46:05 · 534 阅读 · 0 评论 -
第二章 内存模型JMM
一、内存模型 1、线程分配内存空间: 每一个线程都有自己的内存和主内存独立;工作空间存储的主内存中变量的副本。 2、线程与主内存之间数据的传递过程 主内存拷贝工作内存存储: 1、当主内存执行的读read操作; 2、工作内存执行load操作 反之: 1、工作内存执行的存储store操作 2、主内存执行的相应的写write操作 出现线程之前数据不一致的问题如何解决: 出现了可见性 一个线程修改了一个变...原创 2019-09-22 22:18:27 · 172 阅读 · 0 评论 -
第三章 JVM垃圾回收机制与收集器
垃圾机制 引用计数法 定义: 一个对象应用了就对他加1,释放就减1. 过程 通过可达性分析。 分析存在的问题 1、性能问题: 大量的计算 2、导致对象无法被回收(循环引用的问题)。 标记清除算法 定义 标记阶段和清除阶段,通过可达性分析 过程 可达性分析 分析存在的问题 会产生碎片空间。 标记压缩 定义 先标志存活对象,然后在压缩。 过程 可达性分析 主要应用在老年代 分析存在的问题 同上。 复制...原创 2019-09-22 22:42:32 · 141 阅读 · 0 评论 -
第五章 性能监控工具
性能监控⼯具 Linux 监控⼯具 uptime top vmstat原创 2019-09-26 17:21:53 · 192 阅读 · 0 评论 -
第六章 jvm实战分析
JVM实战分析 实例一 程序卡死、没有输出 运行一段程序,期望输出xx,结果在程序运行后,程序卡死,没有预期的输出。 分析步骤: 首先用jps拿到java应用的pid jstack查看线程相关的信息 发现main方法在等待socket接收,而这个接收的过程存在卡死 实例二 CPU飙高 Java 程序 HoldCPUMain 运行后,发现占用 CPU 很高,希望能找到原因 分析步骤 首先用j...原创 2019-09-27 15:59:07 · 134 阅读 · 0 评论 -
第七章 堆、永久区、线程栈、直接内存实战分析
堆、永久区、线程栈、直接内存实战分析 jvm 中的内存区间: 1、堆 2、永久区 3、线程栈 4、直接内存。 总结:这四块空间只要有任意一块空间得不到满足,都可能出现 OOM。 堆溢出 /** *OOM -Xmx16m -Xms16m * Exception :Exception * in thread "main" java.lang.OutOfMemoryError: Java h...原创 2019-09-25 23:26:17 · 238 阅读 · 0 评论 -
第四章 类加载
类装载过程 流程 加载 链接 验证 准备 解析 初始化 加载 装载类的第一阶段是取得二进制流装换为方法区的数据结构在java堆中产生class对象。 准备 链接-验证 目的: 保证Class的格式正确 文件格式的验证 a、是否以0XCAFEBABE开头 b、版本号是合理 元数据验证 a、是否有父类 b、继承了final类(final类不能被继承、如果继承了就有问题) c、非抽象实现了所有抽象...原创 2019-09-26 17:20:36 · 127 阅读 · 0 评论 -
第八章 支配树、锁
支配树,深、浅堆,锁 支配树(Dominator Tree) 支配树体现了对象实例间的支配关系他有如下几个特征 指向对象B的路径都经过对象A,则认为对象A支配对象B。 如果对象A是离对象B最近的一个支配对象,认为对象A为对象B的直接支配者。 浅堆&深堆 锁 对象头Mark Mark Word,对象头的标记,32 位 描述对象的 hash、搀信息、垃圾回收标记、年龄 指向搀记录的指针...原创 2019-09-27 16:21:55 · 181 阅读 · 0 评论