面试小札:JVM虚拟机

  1. 定义与基本概念
  • JVM(Java Virtual Machine)即Java虚拟机,是Java程序的运行核心。它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来运行Java字节码。字节码是一种中间格式,它使得Java程序能够实现"一次编写,到处运行"的特性。
  1. 运行机制
  • 类加载机制

  • 包括加载、验证、准备、解析和初始化这几个阶段。加载阶段是将类的字节码文件加载到内存中;验证阶段是确保字节码文件的正确性和安全性;准备阶段是为类的静态变量分配内存并设置默认初始值;解析阶段是将符号引用转换为直接引用;初始化阶段是执行类构造器方法,对类的静态变量进行赋值操作。

  • 执行引擎

  • 它负责执行字节码指令。有多种执行方式,如解释执行和即时编译(JIT)。解释执行是逐行解释字节码并执行,速度相对较慢。JIT编译器会在程序运行过程中,将热点代码(经常被执行的代码)编译成机器码,这样后续执行这些代码时就可以直接以机器码的速度运行,大大提高了执行效率。

  1. 内存结构
  • 程序计数器

  • 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在多线程环境下,每个线程都有自己独立的程序计数器,用于记录当前线程执行的位置,这样当线程切换回来时能够知道从哪里继续执行。

  • Java虚拟机栈

  • 每个Java方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。随着方法的调用和返回,栈帧在虚拟机栈中入栈和出栈。它是线程私有的,生命周期与线程相同。

  • 本地方法栈

  • 与Java虚拟机栈类似,不过它是为本地(Native)方法服务的,本地方法是用其他语言(如C、C++)编写并通过JNI(Java Native Interface)调用的方法。

  • 是Java虚拟机所管理的内存中最大的一块,它是所有线程共享的区域。主要用于存放对象实例和数组。垃圾收集器主要就是回收堆中不再使用的对象占用的空间,以避免内存泄漏。

  • 方法区

  • 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。它也是各个线程共享的内存区域。在Java 8之后,永久代(PermGen)被元空间(Metaspace)取代,元空间使用本地内存,而不是虚拟机内存。

  1. 垃圾回收(GC)
  • JVM的垃圾回收机制自动回收不再使用的对象所占用的内存空间。有多种垃圾回收算法,如标记 - 清除算法、复制算法、标记 - 整理算法等。不同的垃圾回收器会采用不同的算法组合。例如,Serial GC是一个单线程的垃圾回收器,适合于单核CPU的小型应用;Parallel GC是多线程的垃圾回收器,可以提高垃圾回收的效率;CMS(Concurrent Mark Sweep)GC是一种以获取最短回收停顿时间为目标的垃圾回收器,适用于对响应时间要求较高的应用。
  1. 重要性和应用场景
  • JVM的存在使得Java语言具有高度的可移植性,开发人员可以专注于编写代码,而不用担心底层操作系统和硬件的差异。它广泛应用于企业级应用开发、安卓应用开发(Android使用了经过改造的JVM)、大数据处理(如Hadoop生态系统中的部分组件)等众多领域。
相关推荐
apocelipes16 分钟前
atomic不是免费午餐
java·性能优化·golang·并发
A了LONE27 分钟前
cv弹窗,退款确认弹窗
java·服务器·前端
蔡楚门1 小时前
福彩双色球第2025088期篮球号码分析
java
慕y2741 小时前
Java学习第九十六部分——Eureka
java·学习·eureka
头发那是一根不剩了2 小时前
信创应用服务器TongWeb安装教程、前后端分离应用部署全流程
java·信创·tongweb
22:30Plane-Moon2 小时前
Servlet作用域,监听器,JSP九大内置对象
java·开发语言·servlet
小白(猿)员2 小时前
JVM、JDK、JRE的区别
java·开发语言·jvm
axban3 小时前
QT中删除控件的注意事项、deleteLater和delete的区别
java·数据库·qt
MicoZone3 小时前
JDK源码
java
Resean02233 小时前
SpringMVC 6+源码分析(二)DispatcherServlet实例化流程 1
java·spring boot·spring·servlet·springmvc