类加载机制

1、JVM 和 类

(1)运行java命令: java 带有main方法的类名

■ 命令的作用: 启动jvm,并加载字节码 ,执行程序

  • 当调用java命令来运行某个java程序时,该命令将会 启动一个jvm进程 (同一个jvm中的所有线程变量都处于处于同一个进程中,共享给jvm的内存区间。)
  • 每次启动一个程序,在任务管理器,就会出现一个进程

(2)jvm退出的情况( jvm进程一旦结束,该进程中内存中的数据会丢失 ):

  • 程序正常执行结束
  • 使用System.exit(0) 方法
  • 出现异常,没有捕获异常
  • 平台强制结束jvm进程(在任务管理器那里关闭掉java进程)

2、类加载机制:

(1) 将类加载进内存中(三个步骤:加载、连接、初始化)

■ 当程序 主动使用 到某个类时,若该类 还没有被加载进内存中 ,则系统会通过 加载、连接、初始化 三个步骤对该类就那些初始化操作。

  • 在程序中,每次要用到某类,都是需要将该类加载进内容的( 将类加载进内存包括了三个步骤:加载、连接、初始化 )
  • 卸载类:当虚拟机停止工作的时候,该类就从虚拟机中卸载了
  • 类加载进虚拟机的特点 : 当类一旦加载进虚拟机,就不卸载,永驻内存,直到虚拟机停止工作。

(2) 类加载机制【加载、连接、初始化、使用、卸载】:

1) 类的加载 :是指将类的class文件(字节码文件)载入内存之中,并为之创建一个 java.lang.Class 对象【 字节码对象 

  • 万物皆对象, 描述对象的类也是一种对象 ,我们使用 java.lang.Class 对象【字节码对象】来描述类这种对象。

□ 类的加载过程是由 类加载器 (ClassLoader)完成,类加载器通常是由jvm提供的,我们称之为系统类加载器,我们也可以自定类加载器(需要继承ClassLoader类)

  • 不同的类加载器可以实现加载本地字节码文件,jar包中的字节码,通过网络加载字节码等等。

□ 为什么已经有系统自带的类加载器,还需要自定义的类加载器?( 加载方式 不符合需求)

  • 当我们使用框架时,需要加载配置文件时,通过系统加载器的加载方式无法加载配置文件, 需要自定义类加载器,重新去定义加载方式。

2) 类的连接 :当类被加载进内存之后,系统为之生产了一个对应的Class对象【字节码对象】,接着 把类的二进制数据合并到JRE中。

  • 验证 :检测被加载的类是否有正确的内部结构。
  • 准备 :负责为类的static变量分配内存,并设置默认值。
  • 解析 :把类的二进制数据中的符号引用替换为直接引用。

3) 类的初始化 :在此阶段, jvm负责对类进行初始化,主要就是对static变量进行初始化。

类的初始化包含如下几个步骤:

  • 当类还没被加载和连接,则程序先加载并连接该类
  • 当该类的父类还没有被初始化,则先初始化其父类
  • 当类中有初始化语句( 静态代码块 --- 一般用来加载资源 ),则系统依次执行这些初始化语句

✿ (3) 总结类的加载机制:

■ 程序需要执行某个类,需要将类加载进内存,系统为该类创建字节码对象,然后进行初始化,再使用,最后卸载。

■ 类加载进虚拟机的特点 : 当类一旦加载进虚拟机,就不卸载,永驻内存,直到虚拟机停止工作。

 看完如果有帮助,希望可以给个 三连 ,你的鼓励就是我不断前进的动力。谢谢
关注我:私信获取Java高级架构资料、大厂面试试题、视频

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值