本文是对于深入理解java虚拟机的笔记和提纲整理
主要用于复习和知识点快速复习
笔记:https://blog.csdn.net/qq_41157876/article/details/107189395
2.1 内存结构
方法区栈堆本地方法栈程序计数器2.2 直接内存
2.3 对象创建过程
检查类加载分配内存地址(CAS / TLAB)地址数据清零设置对象头执行构造方法 <init>()等2.4 对象内存布局
对象头(MarkWord + KlassWord + (数组))实例数据(父类数据 + 本类数据)padding2.5 对象的访问定位
句柄访问直接指针访问(Hotspot使用)笔记:https://blog.csdn.net/qq_41157876/article/details/107748251
3.1 判断对象是否可回收
引用计数算法可达性分析算法3.2 四种引用
强引用软引用弱引用虚引用3.3 finalize()方法
3.4 垃圾回收
三个假说(朝生夕灭,越熬越久,跨代引用少)安全区域的概念GC分类垃圾回收算法(标记清除,标记整理,复制)jvm实际回收算法记忆集和卡表并发问题下如何标记GC ROOT(增量更新,原始快照)3.5 垃圾回收器
SerialSerialOldParNewParallel ScavengeParallel OldCMS(运行流程,优缺点)G1(概述及运行流程,特点,其他细节,优缺点)笔记:https://blog.csdn.net/qq_41157876/article/details/107798188
4.1 Java运行流程
运行期编译期4.2 Class类文件结构
4.3 字节码指令
初始化和构造(<cinit>()V,<init>()V)方法调用(静态绑定(解析,非虚方法)/动态绑定(分派,虚方法)) invokevirtualinvokespecialinvokespecialinvokevirtual执行流程(多态原理)vtable和itable4.4 类加载机制
加载(用类加载器将字节码载入方法区中)连接 校验(检验类是否符合jvm规范)准备(为静态变量分配内存并设置初始值)解析(将常量池内的符号引用替换为直接引用)初始化(执行static的内容 <cinit>(),懒加载)4.5 类加载器
三个加载器(BootStrap / Extension / Application)双亲委派机制破坏双亲委派机制(线程上下文类加载器TCL)笔记:https://blog.csdn.net/qq_41157876/article/details/107884006
5.1 前端优化(编译期优化) —— 语法糖
语法糖的概念前端优化 / 语法糖 泛型最常用的语法糖 拆箱装箱循环遍历 for( int a : list)变长参数 public static void main( String[] args )if语句优化默认构造器.....5.2 后端优化(.class文件 转 二进制机器码 / 运行期)
解释器和即时编译器JIT优化技术 方法内联逃逸分析公共子表达式消除笔记:https://blog.csdn.net/qq_41157876/article/details/112605136
6.1 Java内存模型
缓存一致性(Cache Coherence)JAVA内存模型JMM6.2 线程
Java线程的实现6.3 线程安全与锁优化