Java虚拟机 类装载流程 虚拟机内部体系结构

本文详细介绍了Java虚拟机的内部体系结构,包括ClassLoader的工作原理及应用实例,以及其在程序加载过程中的作用。同时阐述了Java虚拟机运行时数据区的组成,解释了方法区、堆、PC寄存器、Java栈和本地方法栈的功能,以及执行引擎如何执行被装载类的方法中的指令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 JVM中的ClassLoader
  JVM本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样,BootstrapClassLoader是用本地代码实现的,它负责加载核心JavaClass(即所有java.*开头的类)。

  另外JVM还会提供两个ClassLoader,它们都是用Java语言编写的,由BootstrapClassLoader加载;其中Extension ClassLoader负责加载扩展的Javaclass(例如所有javax.*开头的类和存放在JRE的ext目录下的类)ApplicationClassLoader负责加载应用程序自身的类。

  当运行一个程序的时候,JVM启动,运行bootstrapclassloader,该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此时被加载),然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class,这就是一个程序最基本的加载流程。

2、 执行ClassLoader例子
  什么时候JVM会使用ClassLoader加载一个类呢?当你使用java去执行一个类,JVM使用ApplicationClassLoader加载这个类;然后如果类A引用了类B,不管是直接引用还是用Class.forName()引用,JVM就会找到加载类A的ClassLoader,并用这个ClassLoader来加载类B。JVM按照运行时的有效执行语句,来决定是否需要装载新类,从而装载尽可能少的类,这一点和编译类是不相同的。

3、Java虚拟机内部体系结构



 

当Java虚拟机运行一个程序时, 它需要内存来存储许多东西, 例如:字节码,从已装载的class文件中得到的其他信息,程序创建的对象,传递给方法的参数,返回值,局部变量,以及运算的中间结果等等,Java虚拟机把这些东西都组织到几个“运行时数据区”中, 以便于管理。
1、方法区:JVM装载class二进制文件, 解析类型信息(类名, 类路径,成员变量, 方法, 继承父类,接口等等),将其存放到方法区中

2、堆:JVM运行时创建的对象都存放到堆中

3、PC寄存器:当执行一个Java方法时, PC寄存器的值总是指示下一条将被执行的指令

4、Java栈:执行一个Java方法时, 存储该方法的状态:局部变量,传递的参数,返回值,以及运算的中间结果等等

5、本地方法栈:存储本地方法的调用

执行引擎:负责执行那些包含在被装载类的方法中的指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值