Java面试题大全:JVM内存结构、垃圾回收算法与四种引用类型

需积分: 0 0 下载量 57 浏览量 更新于2024-06-30 收藏 10.61MB PDF 举报
Java面试题及答案 本资源是Java面试题及答案的汇总,涵盖了Java相关的知识点,包括Java虚拟机(JVM)、垃圾回收、Java引用类型、GC算法等。 **Java虚拟机(JVM)** Java虚拟机(JVM)是Java语言的 runtime 环境,它负责加载、验证、执行Java字节码。JVM分为五个部分:程序计数器、虚拟机栈、本地方法区、堆和方法区/永久代。 * 程序计数器(Program Counter Register):存储当前执行的字节码指令的地址。 * 虚拟机栈(VM Stack):存储当前执行的方法调用和局部变量。 * 本地方法区(Native Method Area):存储native方法的信息。 * 堆(Heap):存储所有对象的实例,分为新生代和老年代。 * 方法区/永久代(Method Area/PermGen):存储类的元数据、静态变量和常量池。 **JVM运行时内存** JVM运行时内存分为五个部分:新生代、老年代、永久代、Eden区、ServivorFrom和ServivorTo。 * 新生代(Young Generation):存储短生命周期的对象,包括Eden区、ServivorFrom和ServivorTo。 * 老年代(Old Generation):存储长生命周期的对象。 *永久代(PermGen):存储类的元数据、静态变量和常量池。 **垃圾回收** 垃圾回收是JVM中的一种机制,用于回收无用的对象释放内存。垃圾回收算法有多种,包括: * 引用计数法(Reference Counting):通过计数对象的引用次数来判断对象是否可以被回收。 * 可达性分析(Reachability Analysis):通过追踪对象的引用链来判断对象是否可以被回收。 * 标记清除算法(Mark-Sweep):标记所有可达的对象,然后清除未标记的对象。 * 复制算法(Copying):将所有可达的对象复制到另一个区域,然后清除原来的区域。 * 标记整理算法(Mark-Compact):标记所有可达的对象,然后将所有对象整理到一起,清除空闲空间。 **Java引用类型** Java引用类型有四种:强引用、软引用、弱引用和虚引用。 * 强引用(Strong Reference):强引用是Java中最普通的引用类型,垃圾回收器不会回收强引用的对象。 * 软引用(Soft Reference):软引用是一种弱引用,垃圾回收器在内存不足时可能回收软引用的对象。 * 弱引用(Weak Reference):弱引用是一种弱引用,垃圾回收器在内存不足时可能回收弱引用的对象。 * 虚引用(Phantom Reference):虚引用是一种特殊的引用类型,用于追踪对象的垃圾回收过程。 **GC垃圾收集器** GC垃圾收集器是JVM中的一种机制,用于回收垃圾对象。常见的GC垃圾收集器有: * Serial垃圾收集器(Serial Garbage Collector):单线程、复制算法的垃圾收集器。 * ParNew垃圾收集器(ParNew Garbage Collector):Serial+多线程的垃圾收集器。 * ParallelScavenge收集器(ParallelScavenge Garbage Collector):多线程复制算法、高效的垃圾收集器。 * SerialOld收集器(SerialOld Garbage Collector):单线程标记整理算法的垃圾收集器。