《深入理解Java虚拟机》
文章平均质量分 73
《深入理解Java虚拟机》学习笔记
七海健人
打工战士,闲暇之余把自己的学习和总结记录下,也希望写的东西能帮助到你
展开
-
《深入理解java虚拟机》笔记——2.垃圾回收&回收策略&调优思路
怎么判对对象该被回收了? 引用计数法 给对象一个“引用计数器”,美得你每当这个对象被成功“引用”一次,则让这个引用计数器 +1;引用“失效”,则让这个引用计数器 -1;当引用计数器为 0时,则这个对象该被回收了; 存在“循环引用”的问题,即A与B互相引用,但在其他地方A、B都没有被被使用,这样引用计数器永远不会为 0; 可达性分析 可达性分析则解决了“循环引用”的问题,即规定了一系列称为“GC Roots”的对象,以GC Roots为起点向下搜索,若能找到当前对象,则称当前对象是“可达原创 2022-03-22 12:33:36 · 181 阅读 · 0 评论 -
《深入理解java虚拟机》笔记——3.类加载
什么时候加载一个类?new一个对象;调用类的静态方法或静态属性; 使用反射获取类信息; 初始化一个对象,会先初始化其父类; Jvm启动,即当前java程序启动时必须调用主类的 main() 方法,主类会先加载;类加载过程?(5步)加载;加载类的.class文件,生成Class对象(单例对象); 验证;检查.class文件的二进制字节流,完成“文件格式、元数据、字节码”等的验证; 准备;仅仅为“类变量”初始化; 解析;将常量池的符号引用替换为直接引用; 初始化;真正的执行java代码的原创 2022-03-22 12:33:51 · 295 阅读 · 0 评论 -
《深入理解java虚拟机》笔记——5.用户态与内核态
用户态与内核态? 用户态与内核态是CPU的2种运行级别;CPU运行级别分为0~3,0级权限最高,为“内核态”,3级权限最低,为“用户态”; 为什么分级? 不同级别对应不同的“权限”,当用户执行自己定义的函数时,级别为0,处于用户态;当操作系统执行自身的代码,如对系统硬件接口的操作,如write() / open() 函数,则会进入内核态;低级别的程序无法将自己的级别升到高级别,除非调用系统函数;这样对级别的控制,保证了用户程序无法直接的做一些破坏操作系统的行为(没有权限),而内核态下的操作原创 2022-03-22 12:34:47 · 334 阅读 · 0 评论 -
《深入理解java虚拟机》笔记——4.内存模型与多线程
1. Java内存模型?image.jpeg每个“共享变量(static变量,实例等)”都放在“主存”中,每个线程都有自己的“工作内存”,存放的是共享变量的“副本”;子线程只操作这个副本,修改完成后再将变量值写入主存中;2. 内存间的交互操作?(8种原子操作,操作不可划分)lock / unlock: 变量被单个线程“占有/释放”;read / load / use: 从主存中“读取/导入工作内存/使用”;assign / store / write: 工作内存中的副本“赋值/存原创 2022-03-22 12:34:22 · 331 阅读 · 0 评论 -
《深入理解java虚拟机》笔记——1.内存结构&实例化对象过程
1.JDK与JRE?JDK,全称Java Development Kit,即Java程序开发工具包;包含了JRE,Java API类库和Jvm;JRE,全称Java Runtime Environment,即Java运行时环境,包括Java API子集和Jvm;JVM,全称Java Virtual Machine,即Java虚拟机,java实现跨平台(一次编译,多处运行)的基础;2.Java内存结构(运行时数据区域)image.jpeg1.程序计数器,线程私有,当前java程序执原创 2022-03-20 16:15:25 · 757 阅读 · 0 评论