深入理解JVM:面试必备45题解析

需积分: 0 0 下载量 30 浏览量 更新于2024-08-03 收藏 29KB DOCX 举报
"JVM 45 道面试题及答案" 在Java虚拟机(JVM)领域,面试中常常会涉及到一系列的关键概念和技术,这些在提供的文档中都有所提及。以下是关于JVM的一些核心知识点: 1. **栈帧**: 栈帧是虚拟机执行方法的基本单元,它存储了局部变量表、操作数栈、动态连接、返回地址等信息。局部变量表用于存储方法参数和局部变量;操作数栈用于计算;动态连接通常指向运行时常量池的方法信息;返回地址则指明方法执行完毕后的下一条指令位置。 2. **程序计数器**: 程序计数器是每个线程私有的内存区域,记录了当前线程正在执行的字节码的行号指示器,即方法执行的进度。它用于控制程序的执行流程,如分支、循环、异常处理等。 3. **字符串常量池**: 在JDK 8之前,字符串常量池位于永久代(Perm Gen),但从JDK 8开始,字符串常量池被移到堆内存中。类文件常量池存储在方法区(元空间),包含了类和接口的各种常量信息。 4. **垃圾收集算法**: - **标记-清除**:首先标记所有需要回收的对象,然后统一清除。缺点是会产生内存碎片。 - **复制算法**:将内存分为两部分,每次只使用其中一半,当一半空间满时,将存活对象复制到另一半,然后清空已使用的一半。缺点是浪费了一半的空间。 - **标记-整理**:标记后,让所有存活对象向一端移动,然后清理边界外的内存。效率相对较低。 - **分代收集**:根据对象的生命周期将内存分为年轻代和老年代,使用不同的算法。年轻代通常使用复制算法,老年代常用标记-清除或标记-整理。 5. **引用类型**: - **强引用**:最常见的引用,只要强引用存在,对象就不会被回收。 - **软引用**:在内存充足时保持对象,内存不足时会被回收。常用于缓存。 - **弱引用**:不论内存状况如何,垃圾收集时总会回收弱引用对象。 - **虚引用**:几乎不提供任何控制,仅在垃圾回收时通知用户。通常与引用队列一起使用。 6. **对象回收判断**: JVM通过两种主要方式判断对象是否可回收: - **引用计数法**:对象被引用的次数,但无法处理相互引用的情况。 - **可达性分析**:通过GC Roots作为起点,遍历引用链,不可达的对象被视为可回收。这是现代JVM主要使用的对象可达性判断方法。 以上是JVM面试中常见的知识点,理解和掌握这些概念对于解决性能问题和优化代码至关重要。