当前位置: 首页 > 面试题库 >

Java:说一下类加载的执行过程?

苗阳
2023-04-24

当程序主动使用某个类时,如果该类还未被加载到内存中,JVM会通过加载、连接、初始化3个步骤对该类进行类加载。

1、加载

加载指的是将类的class文件读入到内存中,并为之创建一个java.lang.Class对象。

类的加载由类加载器完成,类加载器由JVM提供,开发者也可以通过继承ClassLoader基类来创建自己的类加载器。

通过使用不同的类加载器可以从不同来源加载类的二进制数据,通常有如下几种来源:

  1. 从本地文件系统加载
  2. 从jar包加载
  3. 通过网络加载
  4. 把一个Java源文件动态编译,并执行加载

2、连接

当类被加载之后,系统为之生成一个对应的Class对象,接着进入连接阶段,连接阶段负责将类的二进制数据合并到JRE中。

类连接又可分为三个阶段:

(1)验证

文件格式验证
元数据验证
字节码验证
符号引用验证

(2)准备

为类的静态变量分配内存,并设置默认初始值。

(3)解析

将类的二进制数据中的符号引用替换成直接引用。

3、初始化

为类的静态变量赋予初始值。

 类似资料:
  • 本文向大家介绍说一下类装载的执行过程?相关面试题,主要包含被问及说一下类装载的执行过程?时的应答技巧和注意事项,需要的朋友参考一下 类装载分为以下 5 个步骤: 加载:根据查找路径找到相应的 class 文件然后导入; 检查:检查加载的 class 文件的正确性; 准备:给类中的静态变量分配内存空间; 解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接

  • 本文向大家介绍说一下图片的懒加载和预加载?相关面试题,主要包含被问及说一下图片的懒加载和预加载?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染。 懒加载:懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数。   两种技术的本质:两者的行为是相反的,一个是提前加载,一个是迟缓甚至不加载。 懒加载对服务器前端有一定的缓解

  • 本文向大家介绍请简单描述一下类的加载过程相关面试题,主要包含被问及请简单描述一下类的加载过程时的应答技巧和注意事项,需要的朋友参考一下 考察点:JVM 如下图所示,JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的

  • 本文向大家介绍请你说一下C++源码到可执行文件的过程?相关面试题,主要包含被问及请你说一下C++源码到可执行文件的过程?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1)预编译 主要处理源代码文件中的以“#”开头的预编译指令。处理规则见下 1、删除所有的#define,展开所有的宏定义。 2、处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#

  • 本文向大家介绍说说你对执行上下文的理解相关面试题,主要包含被问及说说你对执行上下文的理解时的应答技巧和注意事项,需要的朋友参考一下 执行上下文相当于当前代码的一个运行环境。 一般执行上下文会以栈的形式在执行栈中存储。 栈顶的执行环境可以访问到整个栈中的变量。

  • 我正在使用Java8 Nashorn来执行一个特定的先前同意的方法。我可以毫无问题地调用特定的方法。不过困扰我的一件事是,当我加载脚本时,它也会执行它。 例如,如果file.js包含一个print("hello world!")scriptEngine.eval(new FileReader("./file.js")将执行并打印hello world。我必须先这样做,然后才能调用我想要的特定方法。