我一共写了两篇博客,这一篇是为了让大家头脑清楚,哪些重要,如果谁有不懂得
https://blog.csdn.net/weixin_40078053/article/details/80546846
这是我的另一篇博客,对虚拟机有详细介绍,当然啦,满满全是干货,总结,否则看虚拟机书有砖头那么厚,看了后面的的忘了前面的。
一、运行时数据区域
线程隔离, 线程共享,
方法区(运行时常量池)、堆、虚拟机栈、本地方法栈、程序计数器
直接内存
二、hotspot虚拟机对象
2.1 对象的创建
1.检查 -->2.分配内存 (理解:指针碰撞,空闲列表)-->3. Init
2.2 对象的内存布局
知道:3块区域:对象头、实例数据和对齐填充
2.2 对象的访问定位
四、垃圾收集
1.判断对象存活
4.1.1 引用计数器法
4.1.2 可达性分析算法
2.引用
强引用,软引用,弱引用,虚引用
3.Finalize方法(自救)
4.3.1 回收方法区
废弃常量和无用的类
4.4.1 标记—清除算法(mark-sweep)
4.4.2 复制算法(copying)
4.4.3 标记整理算法(mark-compact)
4.4.4 分代收集算法
5.垃圾收集器
6.内存分配与回收策略
MinorGC:清理新生代
MajorGC:清理老年代
FullGC:清理整个堆空间
4.6.1 对象优先在Eden分配
4.6.2 大对象直接进入老年代
4.6.3长期存活的对象将进入老年代
4.6.4动态对象年龄判定
4.6.4 空间分配担保
五、虚拟机类加载机制
1.需要知道虚拟机规范规定有且只有5种情况必须立即对类进行初始化和不会导致初始化的情况。
2.类在加载进入内存的声明周期:加载、验证、准备、解析、初始化、使用和卸载7个阶段
5.3 类的加载器
启动类加载器,扩展类加载器,系统类加载器
双亲委派模型:优先级:调用父类优先这张图很明白吧。
六、Java内存模型与线程
6.1内存间的交互操作
lock(锁定),unlock(解锁),unlock(解锁),load(载入),use(使用),assign(赋值),store(存储),write(写入)
6.2 重排序
重排序分成三种类型:1.编译器优化的重排序, 2.指令级并行的重排序, 3.内存系统的重排序
6.3 对于volatile型变量的特殊规则(注意)
6.4 对于long和double型变量的特殊规则
6.5 原子性、可见性和有序性
6.6 先行发生原则:1.程序次序规则 2.管程锁定规则 3.Volatile变量规则 4.线程启动规则
5.线程终止规则 6.线程中断规则 7.对象终结规则 8.传递性
6.7 Java线程调度:1.协同式调度 2.抢占式调度
6.8 状态转换:
1.新建 2.运行 3.无限期等待 4.限期等待 5.阻塞 6.结束
七、线程安全
1、不可变 2、绝对线程安全 3、相对线程安全 4、线程兼容 5、线程对立
八、逃逸分析