没有合适的资源?快使用搜索试试~ 我知道了~
JVM面试场景题涉及的Java类加载过程包含七个步骤:加载、验证、准备、解析、初始化、使用和卸载。加载阶段通过类的全限定名获取其二进制流,并在内存中生成Class对象;验证阶段确保Class文件的安全性;准备阶段分配内存并初始化类的静态变量;解析阶段完成符号引用到直接引用的转换;初始化阶段执行类中的Java程序代码。类加载主要由ClassLoader及其子类实现,分为隐式和显示加载。JVM只加载需要的类,其余类在使用时才加载。类加载器负责从硬盘读取类文件到内存。Java内存分配涉及寄存器、静态域、常量池、非RAM存储、堆内存和栈内存。堆内存包括new创建的对象和数组,由JVM的垃圾回收器管理;栈内存存放基本类型的变量和对象引用变量。 Java内存模型中的堆内存结构和永久代是面试中常问知识点。JVM的堆内存是运行时数据区,所有类的实例和数组都存放在此。堆内存又分为Eden区、Survivor区和老年代。永久代(Perm Gen space)在JDK8之前用于存储类信息、常量、静态变量,但JDK8之后被元空间(Metaspace)替代,移至本地内存。 在技术岗位笔试或面试中,以上知识点是考察候选人对Java虚拟机内部机制理解的重要方面。掌握类加载机制和内存分配原理是Java开发人员的基本功,有助于深入理解Java程序运行过程,以及解决生产环境中遇到的性能和内存问题。面试时,面试官通常会通过这些题目来评估候选人的技术深度和问题解决能力。
资源推荐
资源详情
资源评论




















格式:zip 资源大小:18.2MB










JVM 面试题
一.Java 类加载过程?
Java 类加载需要经历一下 7 个过程:
1. 加载
加载是类加载的第一个过程,在这个阶段,将完成一下三件事情:
• 通过一个类的全限定名获取该类的二进制流。
• 将该二进制流中的静态存储结构转化为方法去运行时数据结
构。
• 在内存中生成该类的 Class 对象,作为该类的数据访问入口。
2. 验证
验证的目的是为了确保 Class 文件的字节流中的信息不回危害到
虚拟机.在该阶段主要完成以下四钟验证:
• 文件格式验证:验证字节流是否符合 Class 文件的规范,如
主次版本号是否在当前虚拟机范围内,常量池中的常量是否
有不被支持的类型.
• 元数据验证:对字节码描述的信息进行语义分析,如这个类是
否有父类,是否集成了不被继承的类等。

• 字节码验证:是整个验证过程中最复杂的一个阶段,通过验
证数据流和控制流的分析,确定程序语义是否正确,主要针
对方法体的验证。如:方法中的类型转换是否正确,跳转指
令是否正确等。
• 符号引用验证:这个动作在后面的解析过程中发生,主要是
为了确保解析动作能正确执行。
3. 准备
准备阶段是为类的静态变量分配内存并将其初始化为默认值,这些
内存都将在方法区中进行分配。准备阶段不分配类中的实例变量的
内存,实例变量将会在对象实例化时随着对象一起分配在 Java 堆
中。
public static int value=123;//在准备阶段 value 初始值为 0 。在初
始化阶段才会变为 123 。
4. 解析
该阶段主要完成符号引用到直接引用的转换动作。解析动作并不一
定在初始化动作完成之前,也有可能在初始化之后。
5. 初始化
初始化时类加载的最后一步,前面的类加载过程,除了在加载阶段
用户应用程序可以通过自定义类加载器参与之外,其余动作完全由

虚拟机主导和控制。到了初始化阶段,才真正开始执行类中定义的
Java 程序代码。
6. 使用
7. 卸载
二.描述一下 JVM 加载 Class 文件的原理机制?
Java 语言是一种具有动态性的解释型语言,类(Class)只有被加
载到 JVM 后才能运行。当运行指定程序时,JVM 会将编译生成
的 .class 文件按照需求和一定的规则加载到内存中,并组织成为
一个完整的 Java 应用程序。这个加载过程是由类加载器完成,具
体来说,就是由 ClassLoader 和它的子类来实现的。类加载器本
身也是一个类,其实质是把类文件从硬盘读取到内存中。
类的加载方式分为隐式加载和显示加载。隐式加载指的是程序在使
用 new 等方式创建对象时,会隐式地调用类的加载器把对应的类
加载到 JVM 中。显示加载指的是通过直接调用 class.forName()
方法来把所需的类加载到 JVM 中。
任何一个工程项目都是由许多类组成的,当程序启动时,只把需要
的类加载到 JVM 中,其他类只有被使用到的时候才会被加载,采
用这种方法一方面可以加快加载速度,另一方面可以节约程序运行
时对内存的开销。此外,在 Java 语言中,每个类或接口都对应一
个 .class 文件,这些文件可以被看成是一个个可以被动态加载的

单元,因此当只有部分类被修改时,只需要重新编译变化的类即可,
而不需要重新编译所有文件,因此加快了编译速度。
在 Java 语言中,类的加载是动态的,它并不会一次性将所有类全
部加载后再运行,而是保证程序运行的基础类(例如基类)完全加
载到 JVM 中,至于其他类,则在需要的时候才加载。
类加载的主要步骤:
• 装载。根据查找路径找到相应的 class 文件,然后导入。
• 链接。链接又可分为 3 个小步:
• 检查,检查待加载的 class 文件的正确性。
• 准备,给类中的静态变量分配存储空间。
• 解析,将符号引用转换为直接引用(这一步可选)
• 初始化。对静态变量和静态代码块执行初始化工作。
三 Java 内存分配。
• 寄存器:我们无法控制。
• 静态域:static 定义的静态成员。
• 常量池:编译时被确定并保存在 .class 文件中的(final)常
量值和一些文本修饰的符号引用(类和接口的全限定名,字
段的名称和描述符,方法和名称和描述符)。
• 非 RAM 存储:硬盘等永久存储空间。
剩余18页未读,继续阅读
资源评论


数研基站
- 粉丝: 67
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 2020年博客网站设计的开题报告.doc
- 国税网络发票系统的与实现.doc
- ACM在线评测系统设计报告-软件工程实训课程设计.doc
- 24基于物联网的信息系统课件高二上学期高中信息技术必修2第2单元教科版(1).pptx
- 电子商务就业计划书.doc
- 2020年卫星通信应用系统对水文工作的应用论文.doc
- 人工智能行业发展趋势PPT.pptx
- 通信行业防汛演练方案.docx
- 《电子商务本质》课件.ppt
- 计算机教室工作计划及总结精选(13篇).docx
- 无线网络覆盖设计专业技术方案.doc
- 最全的事业单位测验考试计算机知识测验考试.doc
- 广电网络公司手机电视可行性研究报告.doc
- 手机游戏网络推广的方案案例.doc
- 2024年运维软件项目投资申请报告.docx
- 数据库学生成绩管理系统课程设计.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
