JVM详解(一)加载机制

JVM官网

可以参考oracle官网中jvm
jvm官网
在这里插入图片描述
学习jvm更好的排查问题
java通过javac编译生成class文件,接下来的工作就是jvm中运行了
class文件打开后是一个二进制或者16进制文件
在这里插入图片描述

在这里插入图片描述u4表示cafe babe,凡是class文件开头的都是cafe babe
u2表示版本,16进制换算成二进制文件

类加载机制是将class文件交给jvm

类加载机制步骤

在这里插入图片描述

1、装载

先找到类文件的所在的位置,类文件的信息交给jvm。类文件所对应的对象
类加载器,不同的类用不同的类加载器
类加载器
如何进行加载
父类优先进行加载,确保jvm中只有一个全路径的类
这就是双亲委派机制
源码中有个方法,load,先加载父类,在加载子类
ClassLoader类中有一个loadClass方法,下面是一段代码,大家可以自己看一下源码
在这里插入图片描述如何破坏双亲委派机制
我们可以重写上面的这个方法

加载完后,class文件分门别类放到jvm中,这就要讲jvm进行一个划分
类文件放在方法区,类文件中对象放到堆中

2、链接

验证:保证类加载的正确性
准备:为类的静态变量分配内存空间,并将其的值初始化为默认值
解析:将类中的符号引用转换为直接引用
直接引用就是地址,将一些符号转变为地址

3、初始化

为静态变量赋值

jvm运行时数据区

运行时常量池,在方法区中
栈:线程创建的时候会创建栈,解决线程执行方法
本地方法栈运行的是C语言的代码
PC Register:记录方法执行的位置
在这里插入图片描述
01方法区
jdk1.7 永久代
jdk1.8 元空间
在这里插入图片描述
02堆
在这里插入图片描述
03栈
一个线程的创建代表的是一个栈,每个方法被当前线程调用了,就代表一个栈桢
栈溢出 StackOverflowError

以上三个重点关注

未完

既然有了运行时数据区,那内存模型(JMM)是什么
当代码不在运行状态时,在物理落地的状态
内存模型中的metaspace 和heap相当于对运行时数据区中的方法区和堆得一个落地

java虚拟机栈执行方法时候经历了什么
字节码指令,描述了class文件在jvm中每一步的状态是做什么?请看下一篇文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值