JVM一条龙
JVM,之前觉得是不可触及的东西,怎么也得高级Java程序员才能接触吧,我等鼠辈不感动不感动。然后后面毕业时找工作发现都要求应届生熟悉JVM……额…其实可以试试。
一、JVM架构图
好大一个图
二、类加载
首先得知道什么是类加载?
类加载就是将类信息经过一系列处理放到内存,供实例化使用。
1、加载
JVM提供了不同类型的类加载器,采用双亲委派机制。不同类加载器的加载路径不同。
双亲委派的好处:1、反正类的重复加载。2、防止核心API被恶意篡改。
2、链接
链接阶段有三个子步骤:
验证:确保class文件的字节流信息符合JVM的规范。
准备:为类中的静态变量分配内存空间。
解析:将常量池中的符号引用转换为直接引用。
ps:符号引用(以符号来描述引用的目标),直接引用(直接指向目标的指针)
3、初始化
简言之,为类的静态变量赋予正确的初始值。
三、运行时数据区
1、组成部分
就用之前画的思维导图大致描述吧
2、如何判断对象是否要被回收?
可达性分析算法
以根对象集合(GCRoots)为起始点,按照从上至下的方式搜索被根对象集合所连接的目标对象是否可达,不可达的则会被下次gc回收
引用记数法
对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加一;当引用失效时,计数器的值就减一。当某一时刻计数器的值为零时,这个对象就不再被使用。
ps:存在循环依赖的问题。
3、垃圾回收算法
- 复制算法(新生代)
- 分代算法
- 标记清除(老年代)
- 标记整理(老年代)
4、GC收集器
对于我们做服务器开发,要深入理解CMS和G1这两个:
未完待续…
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 coder-S!
评论