主要把握几个重要点:
- JVM的运行时数据区
- 垃圾回收机制
- 类的加载过程
1.JVM的运行时数据区
JVM有虚拟机栈,方法区,本地方法栈,堆,程序计数器。需要注意的是从java1.7出现了元空间,1.8取消了方法区,全部用元空间,存在本地内存中。
2.垃圾回收机制
堆内存分为年轻代,年老代。用可达性算法判断是否丢弃对象。
minigc时清空Eden和from区,复制存活到to区。这是复制算法
-XX:SurvivorRatio即Eden和from的比例,默认是8,即Eden区占年轻代空间的8/10,from和to各占survivor的一半。
fullgc主要是回收年老代,把存活对象移到内存的一端。这是标记-整理算法
有四种对象的引用类型:强引用,软引用,弱引用,虚引用。
收集器是具体回收策略
- 新生代收集器:Serial、ParNew、Parallel Scavenge;
- 老年代收集器:Serial Old、Parallel Old、CMS;
- 整堆收集器:G1
只有CMS和G1是真正的并发执行,不影响业务代码
类的加载:加载、验证、准备、解析和初始化
双亲委派模型:类加载器不会自己加载,而是把这个请求委派给父类加载器。只有父类无法完成时子类才会尝试加载。
破坏双亲委派模型:线程上下文加载器