jvm学习笔记-类加载机制以及加载过程

1.类加载

理论一: 在java代码中,类(class)的加载、连接、初始化过程都是在程序运行期间完成的。(还有使用与卸载【将类从内存中释放出来OSGI技术】)
我的理解: class类就是泛指java代码编译后生成的字节码文件。当然其他语言编译后也可以生成class类文件(不抬杠)。一个类并不是指一个class文件,但是一个class文件里面肯定会至少有一个类。类的的加载、连接、初始化。我的理解是就跟拼积木或者组装一辆赛车一样。加载就相当于把赛车的零部件(类)从包装里拆出来放到桌子(内存)上。类的连接就相当于梳理零部件。把零部件的关系梳理清楚。那些可以组装成底盘(静态代码块等),哪些可以组装成驱动装置。初始化就相当于是组装好了。做后面的涂装或者加润滑油等操作。
以上是在运行期间(run time)完成的。这样一种机制是的java的扩展性大大提高。jvm可以更方便的兼容其他语言,只要是你按照我的规范编译的class类。

理论二: 类加载器(classLoader)加载类的工具类。
我的理解: 类相当于是一个一个砍伐好的树木,类加载器就相当于运输树木的大卡车。什么时候加载那些类都是有jvm控制的。

理论三: java虚拟机与程序的生命周期
在以下情况下,java虚拟机将结束其生命周期(STW)。
1.执行了System.exit()方法;
2.程序正常执行结束;
3.程序在执行过程中遇到了异常(Exception)或错误(Error)导致中止。
4.由操作系统异常导致jvm进程结束。
理论四: 类的加载、连接、初始化;
类的加载:查找并加载类的二进制数据;
类的连接:验证:确保被加载的类的正确性。
准备:为类的静态变量分配内存并将其初始化为默认值。
解析:把类中的符号引用转换为直接引用。
初始化:为类的静态变量赋予正确的初始值。
我的理解: 类的加载与初始化不用说都是字面意思理解就行。类的连接又分为验证阶段:确保加载的类都是正确的。因为即使编译成class文件也是会有被篡改的风险。所以在这一部校验。准备阶段就是把所有类的静态变量分配内存地址并加载进来。然后将其初始化成默认值。比如int a =123; 那么a就初始化成了0.在解析阶段被赋予了123. 符号引用与直接引用有疑惑。后续再理解。
理论五: java程序对类的使用方式有两种 主动使用与被动使用。
理论六: 类加载: 类加载是指将class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存中创建一个java.lang.Class对象用来封装类在方法区内的数据结构。
我的理解: 类的加载加载的是class文件的中的二进制数据。而不是二进制文件。把数据读入到内存中放到运行时数据区内。然后会在内存中创建一个class对象来对这个类进行肢解。数据结构方法体、变量、实例等。

类加载这块里面的内容感觉跟编原里的概念很相似。如果有上过编原的课,这些概念会很好理解。概念很枯燥只有通过理解记笔记的形式来记忆这一块。但是理解了以后记忆就没那么难了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值