"JAVA核心面试知识整理.pdf"
Java面试中,深入理解JVM(Java虚拟机)是必不可少的。这份资料详细梳理了JVM相关的高频面试知识点,包括JVM内存区域、垃圾回收机制以及各种垃圾收集算法。
1. JVM内存区域:
- 程序计数器:每个线程都有自己的程序计数器,记录当前线程执行的字节码指令地址。
- 虚拟机栈:同样为线程私有,用于存储局部变量表、操作数栈、动态链接和方法出口等信息。
- 本地方法区:用于支持native方法的执行,线程私有。
- 堆:所有线程共享的区域,用来存储对象实例和数组,是GC的主要区域。
- 方法区/永久代:存储类信息、常量、静态变量等,Java 8后被元空间取代。
2. JVM运行时内存细分:
- 新生代:分为Eden区、SurvivorFrom区和SurvivorTo区,主要存放新创建的对象,采用Minor GC进行垃圾回收。
- 老年代:存放存活时间较长的对象,进行Major GC。
- 永久代/元空间:存储加载的类信息、常量、静态变量等,Java 8以后元空间代替了永久代。
3. 垃圾回收与算法:
- 确定垃圾的方法:引用计数法和可达性分析,其中可达性分析是现代JVM普遍采用的方法。
- 垃圾回收算法包括:
- 标记清除:标记无用对象并进行清理,但会导致内存碎片。
- 复制算法:将内存分为两部分,每次只使用一部分,效率高但浪费空间。
- 标记整理:标记后将存活对象向一端移动,再清理边界外的区域。
- 分代收集算法:根据对象生命周期将内存分为新生代和老年代,使用不同的算法。
4. JAVA四种引用类型:
- 强引用:默认的引用类型,只要对象被强引用,就不会被GC回收。
- 软引用:当系统内存不足时,会回收软引用的对象。
- 弱引用:任何时候只要GC,都会回收弱引用的对象。
- 虚引用:对象是否存活对GC无影响,主要用于跟踪对象被GC回收的活动。
5. GC分代收集算法与分区收集算法:
- 分代收集算法:针对不同生命周期的对象使用不同的算法,如新生代使用复制算法,老年代使用标记整理算法。
- 分区收集算法:将堆内存划分为多个小的区域,独立进行垃圾回收,提高并发性能。
6. GC垃圾收集器:
- Serial收集器:单线程执行,适用于轻量级应用。
- ParNew收集器:Serial收集器的多线程版本,常与CMS配合使用。
- ParallelScavenge收集器:优化了吞吐量,适合后台服务器应用。
- SerialOld收集器:单线程标记整理算法,作为Serial收集器的老年代版本。
这些知识是Java面试中常见的问题,理解并掌握它们能帮助你在面试中自信应对关于JVM的挑战。