Java JVM内存与垃圾回收详解

11 下载量 60 浏览量 更新于2024-07-16 收藏 11.17MB PDF 举报
"JAVA核心知识点整理.pdf" 这篇文档是关于Java核心知识点的全面总结,特别适合面试准备和学习者深入理解Java技术体系。主要内容包括JVM的结构、内存区域、垃圾回收机制以及相关的算法和Java中的四种引用类型。 1. JVM (Java虚拟机) 是Java程序运行的基础,它负责解析和执行字节码。文档详细介绍了JVM的内部结构: - 线程:JVM支持多线程执行,每个线程都有自己的程序计数器、虚拟机栈和本地方法栈。 - JVM内存区域分为程序计数器、虚拟机栈、本地方法栈、堆和方法区(在Java 8后被元空间取代)。这些区域各有其功能,例如: - 程序计数器:记录当前线程的指令位置。 - 虚拟机栈:存储局部变量表、操作数栈、动态链接等信息。 - 本地方法栈:服务本地方法(如JNI)。 - 堆:存放对象实例,线程共享。 - 方法区/元空间:存储类信息、常量、静态变量等,也线程共享。 2. JVM运行时内存进一步细分为新生代、老年代和永久代(Java 8后为元空间): - 新生代:用于存放新创建的对象,分为Eden区、SurvivorFrom区和SurvivorTo区,采用复制算法进行垃圾回收。 - 老年代:存放长期存活的对象,一般使用标记整理算法。 - 永久代/元空间:存储加载的类信息,Java 8后元空间替代了永久代,以减少对JVM内存的限制。 3. 垃圾回收(GC)是Java自动内存管理的关键部分,文档讨论了如何确定垃圾和多种垃圾回收算法: - 确定垃圾的方法包括引用计数法和可达性分析。 - 常见的垃圾回收算法有标记清除、复制、标记整理和分代收集。这些算法各有优缺点,适用于不同的场景。 - 分代收集算法根据对象的生命周期将堆分为新生代和老年代,分别使用不同的算法进行垃圾回收。 4. Java提供了四种引用类型,以不同程度地控制对象的生命周期: - 强引用:默认的引用类型,只要还有强引用指向对象,就不会被GC回收。 - 软引用:在系统内存不足时,会回收软引用指向的对象。 - 弱引用:比软引用更弱,只要有弱引用存在,不会阻止对象被回收。 - 虚引用:只用于跟踪对象何时被回收,不阻止回收。 5. 文档还涉及了不同类型的垃圾收集器,如Serial、ParNew、ParallelScavenge和SerialOld等,它们在单线程或多线程环境下应用不同的垃圾回收策略,以平衡系统的吞吐量和响应时间。 这份文档涵盖了Java开发者必须掌握的JVM内存管理和垃圾回收基础知识,对于理解Java程序的运行机制和优化性能具有重要意义。