Java虚拟机如何加载类的?

Java虚拟机如何加载类的?

作者:勤思 2019-03-05 14:59:42

云计算

虚拟化 Java分基本类型和引用类型。其中按照面向对象的特性,一切皆对象,那么对于基本类型也应该是对象。

 [[258793]]

首先JVM加载类的一般流程分三步:

  • 加载
  • 链接
  • 初始化

那么是否全部Java类都是这样三步走的方式加载呢?我们可以从Java的数据类型去出发。Java分基本类型和引用类型。其中按照面向对象的特性,一切皆对象,那么对于基本类型也应该是对象。但是为了在执行效率和内存占用上进行调优,Java将基本类型特殊处理。所以Java基本类型加载都是Java虚拟机预先定义好了,所以没有加载这个步骤了。引用类型就是类,接口,数组。其中数组是直接由虚拟机直接生成的。类和接口是字节流,都是需要加载。

正文

Java基本类型

首先先看下基本类型的默认值和值域。

 

总结

1.无符号类型:boolean和char

2.boolean在Java虚拟机中,根据虚拟机规范转换为int类型,false为0,true为1

引用类型

引用类型中的数组是直接由Java虚拟机直接生成,接下来直接讲类和接口。为了叙述方便直接统称为类。类的加载分三步。

加载

加载是通过加载器进行加载的。Java虚拟机有个一加载机制,叫做双亲委派模型。具体就是当一个类加载器拿到这个类的时候先给自己的父类加载器进行加载,如果父类加载器没有找到所请求的类,才会给该类加载器。还是挺尊老爱幼的。那么加载器有很多中,在Java9之前分三类。Java9之后分两类。

分类:

Java9之前

  • 启动类加载器:负责加载最为基础和最为重要的类。比如存放在jre的lib目录的jar包中的类以及虚拟机参数-Xbootclasspath指定的类。
  • 扩展类加载器:扩展类加载器的父类的加载器是启动类加载器。扩展类加载器加载相对次要但是又通用的类。比如jre中lib/ext目录下的jar包中的类以及由系统变量java.ext.dir指定的类。

·应用类加载器:应用类加载器的父类加载器是扩展类加载器。负责加载应用加载应用程序路径的类(这里的应用程序的路径就是虚拟机参数-cp/-classpath,系统变量java.class.path或环境变量CLASSPATH指定的路径)。

Java9之后

启动类加载器:同上

平台类加载器:Java9引入模块系统,所以除了少数的几个关键模块是用启动类加载器加载,其余的都有平台类加载器加载。

类加载器除了提供加载功能,还提供命名空间的功能,这个就很像Java的包名一样。即时是同一个类,经过不同的类加载器,命名不同那这两个类也是不是同一个类。

链接

何为链接,就是讲加载的类合并至Java虚拟机,使之能够执行的过程。具体流程可以分类验证,准备以及解析三个过程。

验证:验证的目的就是需要符合Java虚拟机的规范。

准备:为加载类的静态字段分配内存,部分Java虚拟机还会在这阶段构造其他跟类层次相关的数据结构,比如说用来实现虚方法的动态绑定的方法表。

解析:当class文件加载到虚拟机之前这个类不知道自己的成员变量和成员方法的地址,所以编译器会生成一个符号引用,这个符号应用包括所在类的名字,目标方法的名字,接收参数类型以及返回类型。解析就是将这个符号引用转化为实际引用。如果符号引用指向的类没有加载,那么会触发这个类进行加载,但是不会链接和初始化。

Java虚拟机规范并没有要求链接过程完成解析,如果某些字节码使用了符号引用,那么在执行这些字节码之前,需要完成解析。

初始化

初始化就是初始化静态字段,如果静态字段被final修改,那么该字段就会被标记为常量值,其初始化直接由Java虚拟机完成。其他的初始化静态字段的代码Java编译器会放在一个方法中并且命名为 .

初始化就是为常量值直接赋值和执行 方法的过程。Java虚拟机会通过加锁的方式确保 方法只执行一次。

那么什么时候会触发初始化:

1.当虚拟机启动,初始化用户指定的类。

2.当遇到用以新建目标类实例的new指令时,初始化new指令的目标类。

3.当遇到调用静态方法的指令时,初始化该静态方法所在的类。

4.但遇到访问静态字段的指令时,初始化该静态字段所在的类。

5.子类的初始化会触发父类的初始化。

6.如果接口定义了default方法,那么直接实现或者间接实现该接口的类的初始化,会触发该接口的初始化。

7.使用反射API对某个类进行反射调用时,会初始化该类。

8.当初次调用MethodHandle实例时,初始化该MethodHandle指向的方法所在的类。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/234363.html<

(0)
管理的头像管理
上一篇2025-04-21 01:34
下一篇 2025-04-21 01:35

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注