深入理解JAVA JVM与垃圾回收机制

需积分: 5 2 下载量 21 浏览量 更新于2024-07-08 收藏 14.49MB PDF 举报
"JAVA核心知识点整理.pdf" 在Java编程领域,理解和掌握JVM(Java Virtual Machine)的工作原理至关重要,尤其对于面试准备和高级开发者而言。Java面试宝典详细梳理了包括JVM在内的诸多核心知识点,旨在帮助程序员提升技能,顺利进入知名互联网公司。以下是JVM部分的详细讲解: 1. JVM概述 JVM是Java应用程序的运行环境,它负责解释执行字节码,实现了跨平台的特性。JVM分为几个主要区域,每个区域都有其特定的功能。 2. 程序计数器 每个线程都拥有自己的程序计数器,用于存储当前线程执行的字节码指令地址。当线程执行方法时,计数器会更新来指向下一个将要执行的指令。 3. 虚拟机栈 同样是线程私有的,虚拟机栈用于存储局部变量表、操作数栈、动态链接和方法出口等信息。每当执行一个方法,就会创建一个栈帧,对应方法的执行上下文。 4. 本地方法区 本地方法区服务于Java的JNI(Java Native Interface),用于存储 native 方法的调用信息,是线程私有的。 5. 堆(Heap) 堆是Java应用中所有对象实例的存储区域,是线程共享的。根据对象生命周期不同,堆又分为新生代和老年代。 6. 方法区/永久代 在早期的JVM版本中,方法区(又称永久代)存储类信息、常量、静态变量等,但Java 8之后被元空间(Metaspace)取代,以减少对内存的限制。 7. JVM运行时内存 - 新生代:包括Eden区、两个Survivor区(From和To)。对象首先在Eden区创建,经历Minor GC后存活下来的对象会被移动到Survivor区。 - 老年代:存放生存周期较长的对象,进行Major GC。 - 永久代/元空间:存储类加载的元数据。 8. 垃圾回收与算法 - 确定垃圾:通过引用计数法或可达性分析来判断对象是否可被访问。 - 垃圾回收算法:包括标记清除、复制、标记整理和分代收集等。 - 分代收集:根据对象生命周期不同,分别采用不同的算法,如新生代使用复制算法,老年代使用标记整理算法。 9. 引用类型 - 强引用:常规的对象引用,不被GC回收。 - 软引用:当内存不足时,会回收软引用对象。 - 弱引用:任何时候只要发生GC,都会回收弱引用对象。 - 虚引用:仅用于跟踪对象是否被GC,不决定对象的生命周期。 10. GC收集器 - Serial:单线程,适合小型应用。 - ParNew:Serial的多线程版本。 - ParallelScavenge:多线程,关注系统吞吐量。 - SerialOld和ParallelOld:用于老年代的收集,分别是Serial和ParallelScavenge的对应版本。 这些只是JVM及Java核心知识的一部分,实际面试中还可能涉及更多,如Spring框架、微服务、分布式、网络通信等方面的知识。全面掌握这些内容能让你在面试中游刃有余,为成功迈进大厂奠定坚实基础。