没有合适的资源?快使用搜索试试~ 我知道了~
JVM(Java虚拟机)是Java平台的核心组件之一,它是一个在计算机上运行Java字节码的虚拟机。JVM 提供了Java程序运行的环境和基础设施,并且具有高度的可移植性和跨平台性。 JVM 的主要功能包括字节码解释和执行、垃圾回收、内存管理、即时编译等。下面是 JVM 的一些关键特性和应用场景: 跨平台性:JVM 的最重要的特性就是能够使得Java程序在不同的操作系统上运行。通过编译成统一的字节码,Java程序可以在任何安装了JVM的平台上执行,无需重新编译。 自动内存管理:JVM 的垃圾回收机制自动管理内存分配和释放,提供了自动内存管理的功能。这大大简化了Java程序员的工作,减少了手动内存管理的错误和风险。同时,它还通过垃圾回收机制实现了自动资源释放,提高了程序的稳定性和性能。 异常处理:JVM 提供了强大的异常处理机制。Java程序可以通过抛出异常和捕获异常来处理各种错误和异常情况。这提供了一种结构化的方式来处理错误,增加了程序的可靠性和可维护性。 多线程支持:JVM 提供了对多线程编程的支持,Java程序可以轻松地实现并发和并行处理。
资源推荐
资源详情
资源评论
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 内存分配。
剩余18页未读,继续阅读
资源评论
数据搜集者
- 粉丝: 27
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功