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

需积分: 9 0 下载量 108 浏览量 更新于2024-07-15 收藏 10.49MB PDF 举报
"JAVA核心知识点整理.pdf" 这篇PDF文档主要涵盖了Java编程语言中的核心知识点,特别是与Java虚拟机(JVM)相关的内存管理、垃圾回收机制以及相关算法。以下是详细的知识点解析: 1. JVM(Java Virtual Machine)是Java程序运行的基础,它负责解释和执行字节码。JVM为每个线程提供了独立的内存区域,确保并发执行的正确性。 2. **JVM内存区域**: - **程序计数器**:每个线程都有自己的程序计数器,用于存储当前线程正在执行的指令地址。 - **虚拟机栈**:存储方法调用时的局部变量表、操作数栈、动态链接和方法出口等信息,每次方法调用都会创建一个新的栈帧。 - **本地方法区**:支持Java虚拟机调用本地(Native)方法,存放 native 方法的栈帧。 - **堆(Heap)**:所有线程共享,存储对象实例,分为新生代和老年代。 - **方法区/永久代**:存储类的元数据,如类信息、常量、静态变量等。在Java 8之后,被元空间(Metaspace)替代。 3. **JVM运行时内存**: - **新生代**:包括Eden区、两个Survivor区(From和To),用于存放新生的对象。Minor GC主要在这部分进行,通过复制算法减少内存碎片。 - **老年代**:存放生存时间较长的对象,使用标记整理算法来避免内存碎片。 - **永久代/元空间**:存储类的持久信息,Java 8以后,元空间位于native内存中,避免了Java堆的限制。 4. **垃圾回收与算法**: - **确定垃圾**:通过引用计数法和可达性分析来识别不再使用的对象。 - **标记清除算法**:标记所有可达对象,然后清除未标记的对象,容易产生内存碎片。 - **复制算法**:将内存分为两块,每次只使用一块,当一块满时,将存活对象复制到另一块,然后清空。 - **标记整理算法**:标记所有存活对象,然后将它们移动到一端,清空另一端。 - **分代收集算法**:根据对象生命周期将内存分为新生代和老年代,使用不同的算法。 5. **JAVA四种引用类型**: - **强引用**:默认的引用类型,只要强引用存在,对象就不会被垃圾回收。 - **软引用**:当系统内存不足时,会回收软引用指向的对象。 - **弱引用**:在垃圾回收时,无论内存是否充足,都会回收弱引用对象。 - **虚引用**:几乎无实际用途,仅用于跟踪对象在垃圾回收过程中的状态。 6. **GC分代收集算法与分区收集算法**: - **分代收集算法**:针对不同生命周期的对象采用不同的垃圾回收策略,如新生代的复制算法,老年代的标记整理算法。 - **分区收集算法**:将堆内存划分为多个小的连续区域,便于并发回收和减少暂停时间。 7. **GC垃圾收集器**: - **Serial**:单线程的垃圾收集器,使用复制算法,适合小内存应用。 - **ParNew**:Serial的多线程版本,常与CMS配合使用。 - **ParallelScavenge**:多线程,目标是达到更高效的吞吐量。 - **SerialOld**:Serial收集器的老年代版本,使用标记整理算法。 以上就是PDF文档中关于Java核心知识点的概览,涵盖了JVM内存结构、垃圾回收机制及其相关算法、引用类型以及不同的垃圾收集器。这些内容对于理解和优化Java应用程序的性能至关重要。
2024-11-29 上传
2024-11-29 上传