java虚拟机
一、JVM基础概念与跨平台原理
- 跨平台实现:Java通过JVM解决跨平台问题,官方提供适用于不同操作系统(如windows x86、windows arm等)的JVM版本。对上层Java程序代码写法统一要求,程序员只需编写一套代码就能兼容多种环境 ,JVM如同翻译官,虽降低运行效率但提高开发效率。
- 语言生态与借鉴:Java之后很多语言引入虚拟机或运行时(如Python、JS等)。Kotlin、Scala、Groove等语言可编译成与JVM兼容字节码,借助Java生态。
二、JVM相关组件与传统虚拟机对比
- JDK、JRE与JVM关系:JDK是Java开发工具包,用于编写和编译Java代码;JRE是Java运行时环境,用于运行Java程序;JVM是JRE的核心模块 。
- 与传统虚拟机区别:传统虚拟机(如VMware等)模拟完整电脑硬件可安装独立操作系统,JVM只运行Java代码,并非模拟电脑所有核心硬件。
三、JVM内存区域划分
- 程序计数器:保存当前Java程序要运行的下一个字节码指令位置,每个线程都有一个,因线程是CPU调度基本单位 。
- 元数据区(方法区):存放类对应的指令,保存类的基本信息(类名、父类、接口、属性、方法等),Java代码无法干预其内容,由代码中类的数量等确定 。
- 栈:保存方法调用关系,每个栈帧对应一次方法调用,记录方法参数、局部变量、返回值结果和跳转地址等信息,线程私有 。
- 堆:存放new出来的对象,对象内存空间在此,还包含对象相关重要信息(如加锁信息) ,堆空间通常最大。
四、类加载机制
- 类加载过程
- 加载:将.class文件读入内存,解析二进制数据。
- 验证:校验.class文件内容合法性。
- 准备:为类对象分配未初始化内存空间,静态成员初始化为默认值(如0 )。
- 解析:初始化代码中的常量并加载到内存。
- 初始化:执行用户代码,对类静态成员真正初始化,执行静态代码块,加载父类和接口 。
- 双亲委派模型:类加载过程中找类的方式,是面试重点 。