导图社区 JVM
JVM相关知识,内存模型,类加载机制,gc等
MySQL事务,锁,引擎,索引,SQL优化
IO原理与主要IO模型已经底层原理等打发 的非的地方的
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
JVM
内存模型
程序计数器
记录当前线程执行程序的位置
方法区
JDK8 之前叫做永久代,是一片连续的空间; JDK8 之后不再有永久代,但类的元数据信息还在,只不过不再储存在连续的堆空间上
堆
存放对象实例,可分为两部分:年轻代和老年代,默认比例为1:2。新生代可分为2个Survivor区 和Eden区,默认比例为1:1:8
栈
虚拟机栈
线程私有,生命周期与线程相同。创建线程时就会创建一个 java 虚拟机栈。 执行程序时,每个方法都会创建一个栈帧,其存放在 java 虚拟机栈中,通过压栈出栈的方式进行调用 栈帧分为几个区域:局部变量表,操作数栈,动态连接,方法出口等
本地方法栈
与虚拟机栈作用相似。 是为虚拟机使用到的 Native 方法服务
性能调优
JVM参数
常见参数设置
-Xms 设置堆的最小空间大小 -Xmx 设置堆的最大空间大小 -Xmn 设置年轻代大小 -XX:NewSize 设置新生代最小空间大小 -XX:MaxNewSize 设置新生代最大空间大小 -Xss 设置每个线程的堆栈大小
典型 JVM 参数配置参考
性能分析工具
MAT
JMC
JStack
JStat
执行模式
解释模式
编译模式
混合模式
GC
分代回收
年轻代
老年代
持久代
回收器实现
新生代收集器
Serial
复制算法(单线程)
PraNew
复制算法(多线程)
Parallel Scavenge
复制算法(并行回收,高吞吐量,高效利用 cpu )
老年代收集器
Serial Old
标记整理算法
Parallel Old
CMS
回收整个Java堆
G1 收集器
标记整理算法( JDK1.7 后全新的回收器,用于取代 CMS )
垃圾回收算法
标记清除
复制算法
标记整理
分代收集算法
GC Roots
可以作为GC Roots的对象: 1.虚拟机栈(栈帧中的本地变量表)中的引用的对象 2.方法区中的类静态属性引用的对象 3.方法区中的常量引用的对象 4.本地方法栈中JNI的引用的对象
子主题
类加载
步骤
加载
将类的 class 文件加载到内存中,并且为之创建一个 java.lang.class 对象。
连接
1 验证:验证类结构,是否和其他类协调一致
2 准备:为类的类变量分配内存,设置默认初始值
3 解析:将类的二进制文件中的符号引用替换为直接引用
初始化
对类变量的初始化
类的初始化顺序
单个类成员加载顺序: 静态变量>静态代码块>普通变量>初始化块>构造器
有父类的类成员初始化顺序: 父类静态变量/父类静态方法块>子类静态变量/子类静态方法块>父类成员变量/方法块>父类构造函数>子类成员变量/方法块>子类构造函数
类加载机制
全盘负责
父类委托
缓存机制
类加载器
Bootstrap 根类加载器
负责加载 Java 的核心类比如 rt.jar ,由 jvm 自身实现,不是 java.lang.ClassLoader 的子类
Extension类加载器
扩展类加载器,负责加载 jre 的扩展目录
System类加载器
系统类加载器,负责加载有 CLASSPATH 环境变量所指定的 jar 包和类路径
自定义类加载器
编译器优化
公共子表达式的消除
指令排除
内联
逃逸分析
方法逃逸
线程逃逸
栈上分配
同步消除