Android 类加载机制

article/2025/9/19 9:18:00

31aaf75c601b40129724a27a5074f358.jpg

 1.类加载机制

.java文件不是可执行的文件,需要先编译成.class文件才可以被虚拟机执行。而类加载就是指通过类加载器把.class文件加载到虚拟机的内存空间,具体来说是方法区。类通常是按需加载,即第一次使用该类时才加载。

Java与Android都是把类加载到虚拟机内存中,然后由虚拟机转换成设备可识别的机器码。由于它们使用的虚拟机不同,所以在类加载方面也有所区别。Java的虚拟机是JVM,Android的虚拟机是dalvik/art(5.0以后虚拟机是art,是对dalvik的升级)。Java虚拟机运行的是class文件,而Android 虚拟机运行的是dex文件。dex其实是class文件的集合,是对class文件优化的产物,为了避免出现重复的class。

 

先了解一下Android的运行流程:

①Android程序编译的时候,会将.java文件编译成.class文件;

②生成apk时,将.class文件打包为.dex文件;

③Android程序运行的时候,Android的Dalvik/art虚拟机就加载dex文件,然后加载其中的.class文件到内存中来使用。

 

当需要使用某个类时,虚拟机就会加载它的Class文件,并创建对应的Class对象。将Class文件加载到虚拟机的内存里,这个过程称为类加载。

类加载流程:

一个类被加载到虚拟机内存中需要经历加载、连接、初始化几个过程。其中连接分为三个步骤:验证、准备、解析。

27ef03576af747ca8b96b84c072bddcb.png

①步骤一:加载:将外部的Class文件加载到虚拟机内,并存储到方法区。

加载过程主要做了三件事:

1)通过类的全限定名来获取定义此类的二进制字节流。即把类以流的形式加载进内存,类的来源没有说,可以是jar包,也可以是class文件或者是apk文件。这个特性是能够实现插件化技术的理论基础。

2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在获取到这个字节流以后,虚拟机就会把类中的静态存储结果保存到方法区中,保存的过程会转化对应方法区中的数据结构。所以说静态的结构都保存在内存中的方法区中。

3)在内存中生成一个代表这个类的java.lang.Class对象,作为这个类的各种数据的方位入口。当类加载进内存以后,每个类都会生成一个对应的Class对象,当使用这个类的时候,都是通过此Class对象为入口来使用的,比如写程序的时候通过new关键字创建一个类的对象就是通过这个类的Class对象来创建的。

②步骤二:验证:确保加载到Class文件里的信息符合虚拟机要求。主要是对类中的语法结构是否合法进行验证,确认类型符合Java语言的语义。

③步骤三:准备:为类变量分配内存,并设置类变量的初始化值(初始值通常为0,非开发者定义的值)。这个阶段是给类中的类变量分配内存,设置默认初始值,比如一个静态的int变量初始值是0,布尔变量初始值是false。

④步骤四:解析:将常量池内的符号引用转为直接引用,如hello()方法,hello是符号引用,地址值是直接引用。也就是在类型的常量池中寻找类、接口、字段和方法的符号引用,把这些符号引用替换成直接引用的过程。这个过程可以理解为一开始虚拟机对加载到内存中的各种类、字段等并没有一一编号,只是通过一个符号去表示,在解析阶段,虚拟机把内存中的类、方法等进行统一管理起来。

⑤步骤五:初始化:对类变量进行初始化。初始化阶段才真正到了类中定义的java代码的阶段,在这个阶段会对类中的变量和一些代码块进行初始化,比如为类变量进行初始化,在准备阶段对类变量进行的默认初始化,到这个阶段就对变量进行显式的赋值,其中静态代码块就是在这个阶段来执行的。

注意:初始化不会马上执行,当一个类被主动使用的时候才会去初始化,主要有几种情况:

1)当创建某个类的新实例时(如通过new或者反射等);

2)当调用某个类的静态方法时;

3)当使用某个类或接口的静态字段时;

4)当调用Java API中的某些反射方法时,比如类Class中的方法,或者java.lang.reflect中的类的方法时;

5)当初始化某个子类时;

类从被加载到虚拟机内存到被卸载,整个完整的生命周期包括:加载 --> 验证 --> 准备 --> 解析 --> 初始化 --> 使用 --> 卸载七个阶段,其中验证、准备、解析这三个部分统称为连接。

类加载流程比较复杂,但是开发者能够控制的只有第一步「加载」还有最后一步「初始化」,第一步记载的理论基础决定了插件化可以实现,最后一步初始化就是执行实际程序中的代码。其余都是由虚拟机控制的。

 

类加载的主要作用:

①实现类的加载功能

②确保被加载类在虚拟机中的唯一性

 

2.Android中的类加载器

由于java编译出来的是class文件,而Android的APK中包含的是dex文件,dex文件是将所需的所有class文件重新打包,打包的规则不是简单地压缩,而是完全对class文件内部的各种函数表、变量表等进行优化,并产生一个新的文件,所以java和Android中的ClassLoader也不一样,这里主要来看一下Android中的ClassLoader。

类加载进内存后,Android程序通过ClassLoader类去加载内存中的类,然后进行解析运行。

2aeaf4995a2c4ed8af7f39e77bc508b1.png

Android中包含以下几种类加载器:

①BootCla


http://chatgpt.dhexx.cn/article/541FtFif.shtml

相关文章

面试题:请介绍 JVM 类加载机制

JVM 类加载机制 Java 代码执行流程类的生命周期加载验证准备解析初始化clinit 和 init 方法 类加载的时机被动引用 类加载器双亲委派机制 我们在前面分析JVM架构解析的时候,简单介绍了 Java 类加载机制,本文带大家深入分析一下。 Java 代码执行流程 根据…

Tomcat 的类加载机制

在前面 Java虚拟机:对象创建过程与类加载机制、双亲委派模型 文章中,我们介绍了 JVM 的类加载机制以及双亲委派模型,双亲委派模型的类加载过程主要分为以下几个步骤: (1)初始化 ClassLoader 时需要指定自己…

java类加载机制

最近开通了一个订阅号 gexiaolong 在其中记录一些关于java总是记了又忘,忘了又记的一些知识点,所以还是写一篇日志记录一下吧 老规矩,抄作业,关于java的类加载机制的问题也是看了忘,忘了又在看 在此梳理记录一下 说…

类加载机制详解

一、类加载机制 Java虚拟机把描述类的数据从Class文件加载进内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 虚拟机设计团队把类加载阶段中的“通过一个类的全限定…

类的加载机制

文章目录 前言类加载的生命周期:加载(Loading)、验证(Verification)、准备(PreParation)、解析(Resolution)、初始化、使用、销毁,其中验证,准备,解析又叫做连…

类加载机制

1、JVM 和 类 (1)运行java命令: java 带有main方法的类名 ■ 命令的作用:启动jvm,并加载字节码,执行程序 当调用java命令来运行某个java程序时,该命令将会启动一个jvm进程(同一个…

双亲委派模型的破坏

一、类加载机制 Java虚拟机把描述类的数据从Class文件加载进内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 虚拟机设计团队把类加载阶段中的“通过一个类的全限定…

类加载机制(整个过程详解)

一:背景 类加载机制是在我们的真个java的运行阶段中的其中一个阶段。 二:什么是快乐星球(类加载机制) 我们编写的 Java 文件都是以.java 为后缀的文件,编译器会将我们编写的.java 的文件编译成.class 文件,简单来说类加载机制就是jvm从文件系统将一系…

TCP/IP四层模型---应用层

相对于OSI七层模型,TCP/IP四层模型更为简化,总结为应用层,传输层,网络层,数据链路层四层 简单来说,四层协议分别为: 协议 应用层DNS,URI,HTML,HTTP,SSL,SMTP,POP,IMAPTELNET,SSH,FTP,SNMP应用程序相关传输层TCP,UDP,UDP-Lite,SCTP,DCCP操作系统内核负责网络层ARP,IP,ICMP数据链…

OSI七层网络模型与TCP/IP四层网络模型

OSI模型,即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。 OSI网络模型按照…

TCP/IP五层(四层)模型

TCP/IP五层(四层)模型中包含的协议有很多,其中典型代表是TCP协议和IP协议。 应用层:应用程序直接打交道的协议。在实际开发中涉及最多的部分,甚至需要自己设计应用层协议。 传输层:负责端到端之间的传输。&…

【计算机网络】TCP/IP四层模型和OSI七层模型

文章目录 一、TCP/IP四层模型和OSI七层模型关系二、TCP/IP四层模型三、OSI七层模型四、GET和POST的区别五、从输入网址到页面展示的过程六、详细过程 一、TCP/IP四层模型和OSI七层模型关系 1、OSI引进了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立…

TCP/IP四层模型与OSI七层模型

1)网络协议 【网络协议】是【网络上所有设备】(网络服务器、计算机及交换机、路由器、防火墙等)之间【通信规则】的【集合】,它规定了进行【网络中的对等实体数据交换】而建立的规则。由于大多数网络采用【分层的体系结构】&…

OSI七层模型和TCPIP四层网络模型

OSI七层模型和TCP/IP四层网络模型 写在文前,本篇文章是在学习过程抄录的笔记,需要更详细的内容可以在微信搜索javaguide公众号获取。1、OSI划分 七层划分:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层五层划分:…

读懂TCP IP四层模型与OSI七层模型

目录 一、OSI七层模型 二、TCP/IP四层模型 三、OSI模型的七层解读 3.1 OSI七层模型小结 3.2 TCP/IP模型与OSI模型的对应关系 四、常见的网络相关协议 五、TCP和UDP协议 5.1 TCP三次握手 5.2 TCP四次挥手 5.3 UDP协议 5.4 TCP和UDP的区别 六、TCP/IP四层模型与OSI七…

Linux网络_从系统到网络(网络协议栈分层与功能,认识协议,OSI七层模型与TCPIP四层模型,网络通信流程(局域网,跨网络),MAC地址,IP地址)

文章目录 1.网络在体系结构的位置与网络协议栈的层状结构2.协议栈各层的功能3.协议4.OSI七层模型与TcpIp四层模型5.网络通信的流程局域网通信流程(以太网)MAC地址跨网络通信IP地址 1.网络在体系结构的位置与网络协议栈的层状结构 2.协议栈各层的功能 协议栈分层设计达到了解耦目…

TCP/IP五层(或四层)模型

图解TCP/IP协议 基本概念 1、TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三…

matlab怎么画两个自变量的图_tcpip四层模型怎么画?画模型图的好用软件推荐

tcpip四层模型就是一个将osi参考模型的会话层和表示层合并到应用层,数据链路层和物理层合并为链路层后的结果。tcpip四层模型包含应用层、运输层、网络层和链路层。tcpip四层模型的协议功能包括数据的发送、与硬件的交互、消息路由规则、格式定义、错误验证。 tcpip…

TCP/IP四层模型与OSI七层参考模型(网络协议)

TCP/IP四层模型与OSI七层参考模型 一. OSI七层参考模型①. 物理层②. 数据链路层③. 网络层④. 传输层⑤. 会话层⑥. 表示层⑦. 应用层 二. TCP/IP模型①. 物理层②. 数据链路层---网络协议③. 网络层---网络协议④. 传输层---网络协议⑤. 应用层---网络协议 三 .TCP/IP四层模型…