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

清疚 2023-02-16 04:11 39阅读 0赞

目录

前言:

一、描述:

二、什么是类加载机制?

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

1、加载:

2、链接:

3、初始化:


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

format_png

前言:

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


一、描述:

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

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

二、什么是类加载机制?

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

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

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

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

1、加载:

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

2、链接:

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

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

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

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

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

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

3、初始化:

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

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

发表评论

表情:
评论列表 (有 0 条评论,39人围观)

还没有评论,来说两句吧...

相关阅读

    相关 jvm

    文章目录 一. 问题背景 二. 类的生命周期 三. 类加载的时机 四. 类加载全过程(有哪些阶段) 4.1 加载阶段 4

    相关 JvmJvm机制

    类加载时机 > 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加