JAVA JVM内存管理与垃圾回收深度解析

需积分: 9 2 下载量 92 浏览量 更新于2024-07-15 1 收藏 11.73MB PDF 举报
"JAVA核心知识点整理.pdf" 这篇文章是关于Java编程语言的核心概念和知识点的全面梳理,特别适合面试准备和学习提升。主要内容包括JVM(Java虚拟机)的工作原理、内存区域划分、垃圾回收机制以及相关的算法,还有不同类型的引用和垃圾收集器的选择。 1. JVM(Java虚拟机): - 线程:Java中的线程模型是多线程执行的基础,每个线程有自己的程序计数器、虚拟机栈和本地方法栈。 - JVM内存区域:分为程序计数器、虚拟机栈、本地方法栈、堆和方法区(在Java 8后称为元空间)。 - 程序计数器:记录线程正在执行的字节码指令地址。 - 虚拟机栈:用于存储局部变量、操作数栈等,每个线程都有自己的独立栈。 - 本地方法栈:支持JNI(Java Native Interface)调用本地方法。 - 堆:所有对象实例都在堆中分配,是线程共享的内存区域。 - 方法区/元空间:存储类信息、常量、静态变量等,也属于线程共享。 2. JVM运行时内存: - 新生代(Young Generation):包括Eden区、两个Survivor区(From和To),主要存放新创建的对象,使用复制算法进行垃圾回收。 - 老年代(Tenured Generation):存放生命周期较长的对象,使用标记整理算法。 - 永久代/元空间:存储类的元数据,Java 8后由元空间替代,以减少对Native内存的依赖。 3. 垃圾回收与算法: - 确定垃圾的方法:引用计数法和可达性分析。 - 标记清除算法:标记无引用的对象并清除。 - 复制算法:用于新生代,将存活对象复制到一块连续空间,避免碎片。 - 标记整理算法:标记存活对象,然后整理所有存活对象到一端,清理另一端。 - 分代收集算法:根据对象的生命周期特点,分别使用不同的垃圾回收策略。 4. 引用类型: - 强引用:最常用的引用,除非手动断开,否则不会被垃圾回收。 - 软引用:在系统内存不足时,会回收软引用对象。 - 弱引用:即使有弱引用指向对象,只要发生垃圾回收,就会回收该对象。 - 虚引用:无法直接通过虚引用来访问对象,主要用于跟踪对象被垃圾回收的状态。 5. GC分代收集算法与分区收集算法: - 分代收集算法:针对不同生命周期的对象使用不同的垃圾收集策略,如新生代的复制算法和老年代的标记整理算法。 - 分区收集算法:将堆划分为多个小块,可以并发地回收不同区域。 6. 垃圾收集器: - Serial收集器:单线程,适用于轻量级和桌面应用。 - ParNew收集器:Serial收集器的多线程版本,常与CMS(Concurrent Mark Sweep)配合使用。 - ParallelScavenge收集器:追求高吞吐量,采用多线程复制算法。 - SerialOld收集器:Serial收集器的老年代版本,使用标记整理算法。 这些知识点涵盖了Java内存管理的基础,对于理解和优化Java程序的性能至关重要。理解这些概念有助于编写出更加高效、稳定的代码,并在面试中展现出深厚的Java功底。