JVM体系预览

Class loader是否加载class文件,识别开头 cafe babe

jre就是java run environment
灰色代表线程私有,内存占用很少;(不存在垃圾回收机制)
四种ClassLoader


双亲委派机制:
- 一般去父类找已经编译好的,找不到再自己做;(沙箱安全机制)
Native Interface

PC Register寄存器
- 每个线程的PCR指向下一个指令的指针
Method Area 方法区
存储每个类的模板信息————绝对不是放方法的地方

Stack
栈管内存,堆管存储;
- 栈帧保存哪些东东?
- 8中基本类型变量+对象的引用变量+实例方法



Java.lang.StackOverflowError 栈内存溢出
栈堆和方法区的交互关系

堆heap

逻辑上新生养老元空间,物理上只有新生+养老


Java8之后永久代和元空间的变化

堆参数调优
实际生产中Xms 和 Xmx必须调成一样,防止
最大分配的物理内存和初始化的内存设置成一样大小,避免GC和应用程序争抢内存,峰值和峰谷忽高忽低
GC详细日志解读
11个参数的意思
GC是什么
分代收集算法
次数上频繁收集Young区
次数上较少收集Old区
基本不动元空间
GC4大算法优缺点
- 引用计数法(一般不用)
- 复制算法(copying)
- 年轻代中
- 不会产生内存碎片
- 占用double内存
- 标记清除(Mark-Sweep)
- 老年代
- 两次扫描,耗时严重;不连续,会产生内存碎片
- 不需要额外空间
- 标记压缩(Mark-Compact)
- 老年代,耗时严重;
- 标记-清除-压缩
综合
小总结
JMM——JAVA内存模型
- 原子性
- 可见性(通知机制)
- volatile
- 有序性
cpu>内存>硬盘

i think开发中比较重要的 static(只编译一次) > 构造方法块 > 构造方法