JVM白小白 ------JVM类加载描述(三)

目录

前言:

一、描述:

二、什么是类加载机制?

三、过程:加载---链接--初始化

1、加载:

2、链接:

3、初始化:


更新,对JVM陆陆续续,念念不忘。

前言:

JVM,java虚拟机,想要在开发的时候有更深入的思考,对于内存的分布有更深刻的理解,jvm是继java基础内容后,必须要了解的一部分知识。可以先从基本的概念,基础的概念模型开始理解,帮助更加形象地了解JVM的结构,之后可以从反编译字节码的角度,通过类加载机制,执行引擎,把结构和运行过程联系起来。另外多分享交流呀,帮助自己整理思路,同时思想上的碰撞,可以让你更清晰地认识它。


一、描述:

作为程序媛,我们写的都是.java的文件,在开始执行程序的时候,它会被编译成.class文件。如果你使用的是idea开发工具,可以在target文件里看到你编译程序后生成的class文件。

这个也就是二进制字节码文件。从启动程序开始,在我们的项目开始执行main方法之前,这是一个很重要的操作:类加载机制。

二、什么是类加载机制?

它会把java文件加载为class文件,把class文件中的二进制流加载到内存中,做好执行代码前的准备工作,让一切程序运行需要的内存大小,code 到他们该去的地方。

放入内存的这个过程,绝对不是随便的,它有它要遵守的规则,和顺序。

三、过程:加载---链接--初始化

链接包括:验证---准备---解析

1、加载:

总要把java高级语言编程机器可以进行操作的二进制字节流,

2、链接:

确保这个二进制流逝可以是使用的的前提下,根据二进制码,虚拟机开始进行安排工作。根据cpu运行和执行的基本单位线程为依据,分为:线程共有区和线程私有区。

除了动态加载,动态创建,动态调用的数据和资源外,把当前二进制流中的接口,类,方法,参数信息分配到对应的线程区。有值的赋值,有默认值的赋默认值。

思考什么放在线程共有区,什么放在私有区?

线程共用:比如可以直接调用的静态变量,赋值后就不会再改变的常量,引用型数据类型:对象和数组,可以通过引用“指针”,在符合基本访问规则的情况下,可以被其他对象使用的数据类型,都是属于线程共有的。

还有一部分内存,占比也很大不可忽略:常量池(这里说的是运行时的)存放加载入内存的code码。

线程私有: 每一个线程中有很多的方法,方法中的局部变量的作用于当前方法是每一个线程私有的;cpu的资源是很珍贵的,可以压榨一定会压榨,所以有了多线程并行,cpu有自己的算法来选择执行哪个线程,所以有一个记录当前线程执行位置的计数器-------程序计数器。用来记录当前线程正在运行的指令地址,方便下一次获取cpu资源的时候可以根据程序计数器记录的地址继续执行这个线程。所以程序计数器是线程私有的。这里说的只是线程私有和共有区的一部分内容。

3、初始化:

调用类构造器,同时也可以给静态变量赋值,类加载机制的最后一个阶段。

这一部分先絮叨到这里啦~之后继续更新 ❀ ❀ ❀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢美玲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值