JAVA面试:JVM面试题
讲讲JVM原理,JVM是做什么的
- JVM(Java Virtual Machine)是Java虚拟机的简称,它是Java语言的核心部分之一,为运行Java应用程序提供了一个抽象化的计算系统。JVM的主要任务和功能包括以下几个方面:
字节码解释执行:
- JVM负责接收和加载编译后的Java字节码(.class文件),并将其转化为机器可以识别的指令进行执行。这些字节码具有平台无关性,可以在任何安装了JVM的设备上运行。
内存管理与垃圾回收:
- JVM实现了自动内存管理机制,它将内存划分为不同的区域,如堆、栈、方法区等,并对每个区域进行动态分配和回收。
- 垃圾回收机制(Garbage Collection, GC)是JVM的一项重要特性,用于自动追踪并回收不再使用的对象所占用的内存空间,从而确保程序在运行过程中不会因为内存泄漏而崩溃。
类加载机制:
- JVM通过类加载器实现类的生命周期管理,从磁盘读取类文件,执行验证、准备、解析和初始化等过程,使得Java类能够在运行时被正确加载和使用。
多线程支持:
- JVM提供了内置的线程调度和管理机制,能够高效地创建和管理Java线程,以实现并发编程。
安全性和异常处理:
- JVM提供了严格的类型检查、访问控制和异常处理机制,保障了Java程序的安全性和健壮性。
运行时优化:
- 现代JVM(如HotSpot VM)还包含了即时编译器(Just-In-Time Compiler, JIT),把热点代码编译成本地机器码,进一步提高Java程序执行效率。
总之,JVM是一个负责执行Java字节码并为其提供运行环境的虚拟计算机系统,它的存在保证了“一次编写,到处运行”(Write Once, Run Anywhere, WORA)这一Java语言的重要特性得以实现。
JVM 怎么判断一个对象可以销毁了
- 在Java中,当一个对象不再被任何引用指向时,JVM会将其标记为可回收的垃圾对象。
- 垃圾回收器会定期扫描内存中的对象,标记哪些对象是可达的(即有引用指向的对象),哪些对象是不可达的(垃圾对象,即没有任何引用指向的对象)。
主要采用的是可达性分析算法
- GC Roots的定义:
- JVM会从一系列被称为“GC Roots”的根对象开始,这些根对象包括但不限于:虚拟机栈中引用的对象(如局部变量表中的引用)、方法区中类静态属性引用的对象、常量池中的引用、本地方法栈中JNI(Java Native Interface)引用的对象等。
- 可达性分析过程:
- 从GC Roots出发,通过引用链向下搜索,遍历整个对象图并标记所有能直接或间接到达的对象。
- 如果某个对象无法从任何一个GC Root通过引用链直接或间接达到,则说明这个对象是不可达的。
- 最终判定:
- 当一轮可达性分析结束后,所有未被标记为可达的对象被认为是不可达对象,也就是垃圾对象,它们将进入待回收的状态。
- 进一步处理:
- 被标记为垃圾的对象,并非立即被回收,而是等待垃圾收集器按照特定的垃圾回收策略进行回收,比如新生代采用复制算法、老年代使用标记-整理或者标记-压缩算法等。