随笔分类 -  Java / JVM

摘要:Java 的执行流程 Java 的执行流程包括多个阶段,从源码编写到最终程序的执行,涉及到编译、类加载、字节码执行、垃圾回收等多个环节。下面将详细介绍 Java 程序的执行流程。 1. 编写源代码 开发者首先在 IDE 或文本编辑器中编写 Java 源代码文件(以 .java 为扩展名)。源代码文件 阅读全文
posted @ 2024-12-11 20:00 Eiffelzero 阅读(346) 评论(0) 推荐(0)
摘要:Java 中的对象在虚拟机里的存储 在 Java 中,对象在虚拟机中的存储方式取决于 JVM 内存模型,主要存储在 堆(Heap) 中。对象的内存布局和管理方式会影响对象的创建、访问和销毁。下面详细解释对象在 JVM 中的存储结构。 1. 对象在堆中的存储 Java 中的对象通常存储在 堆内存 中。 阅读全文
posted @ 2024-12-11 19:54 Eiffelzero 阅读(168) 评论(0) 推荐(0)
摘要:如何在 Java 中进行内存泄漏分析? 内存泄漏是指程序中无法访问的对象仍然被占用内存,导致内存无法回收,最终导致内存不足、程序崩溃等问题。Java 中的内存泄漏通常与垃圾回收机制的工作方式相关,虽然 JVM 会自动管理内存,但是如果程序设计不当,仍然可能发生内存泄漏。 以下是一些常用的 Java 阅读全文
posted @ 2024-12-11 19:52 Eiffelzero 阅读(1267) 评论(0) 推荐(0)
摘要:常用的 JVM 性能分析工具 JVM 性能分析工具主要用于监控、调试和优化 Java 程序的性能,尤其是在垃圾回收、内存泄漏、线程调度等方面。以下是一些常用的 JVM 性能分析工具: 1. jvisualvm jvisualvm 是一个基于 GUI 的 Java 性能分析工具,它可以帮助开发者进行实 阅读全文
posted @ 2024-12-11 19:49 Eiffelzero 阅读(631) 评论(0) 推荐(0)
摘要:常用的 JVM 配置参数 JVM 配置参数可以用来控制 Java 程序的内存分配、垃圾回收、性能优化等。以下是一些常用的 JVM 配置参数: 1. 堆内存相关参数 -Xms:设置 JVM 初始堆内存大小。例如:-Xms512m 设置初始堆内存为 512MB。 -Xmx:设置 JVM 最大堆内存大小。 阅读全文
posted @ 2024-12-11 19:47 Eiffelzero 阅读(638) 评论(0) 推荐(0)
摘要:如何对 Java 的垃圾回收进行调优? Java 垃圾回收的调优涉及多个方面,从选择合适的垃圾回收器到调整堆内存的大小、配置 GC 参数等,下面是一些常见的调优方法: 1. 选择合适的垃圾回收器 不同的垃圾回收器适合不同类型的应用,因此选择合适的垃圾回收器是调优的第一步: Serial GC:适合单 阅读全文
posted @ 2024-12-11 19:29 Eiffelzero 阅读(281) 评论(0) 推荐(0)
摘要:JVM 垃圾回收调优的主要目标 JVM 垃圾回收调优的目标是为了提升应用的性能,优化垃圾回收过程中的停顿时间和吞吐量。调优的核心目标通常包括以下几点: 1. 减少垃圾回收的停顿时间 停顿时间(Stop-the-World,STW)指的是垃圾回收过程中,所有应用线程必须停止执行的时间。长时间的停顿可能 阅读全文
posted @ 2024-12-11 19:27 Eiffelzero 阅读(143) 评论(0) 推荐(0)
摘要:Java 的 ZGC(Z Garbage Collector) ZGC(Z Garbage Collector) 是 Java 11 引入的一种低延迟垃圾回收器,旨在减少垃圾回收时的停顿时间,并能够在大规模堆内存的环境下提供可预测的低停顿时间。ZGC 是一个并发、并行的垃圾回收器,专为大内存(例如多 阅读全文
posted @ 2024-12-11 19:21 Eiffelzero 阅读(586) 评论(0) 推荐(1)
摘要:Java 的 CMS 垃圾回收流程 CMS(Concurrent Mark-Sweep)垃圾回收器 是一种并发垃圾回收器,旨在减少垃圾回收时的停顿时间,适用于对低延迟要求较高的应用。CMS 主要通过并发标记和并发清除阶段来减少暂停时间。CMS 主要包含以下几个阶段: 1. CMS 的垃圾回收流程 C 阅读全文
posted @ 2024-12-11 19:08 Eiffelzero 阅读(629) 评论(0) 推荐(0)
摘要:Java 的 G1 垃圾回收流程 G1(Garbage-First)垃圾收集器 是一种区域化、并发、低延迟的垃圾回收器,适合大堆内存和对暂停时间有严格要求的应用程序。G1 的垃圾回收流程主要包括以下阶段: 1. 堆的区域化分区 在 G1 中,堆被分为多个大小相等的 Region,每个 Region 阅读全文
posted @ 2024-12-11 18:53 Eiffelzero 阅读(609) 评论(0) 推荐(0)
摘要:什么是 Java 中的 Logging Write Barrier? Logging Write Barrier 是 Java 垃圾回收器在维护堆引用关系时常用的一种机制。它是一种特殊的写屏障(Write Barrier),用于记录堆中某些引用的变化情况。该机制的主要目的是协助垃圾回收器在并发或增量 阅读全文
posted @ 2024-12-11 18:31 Eiffelzero 阅读(174) 评论(0) 推荐(0)
摘要:Java 中的 CMS 和 G1 垃圾收集器如何维持并发的正确性? CMS(Concurrent Mark-Sweep)和 G1(Garbage-First)垃圾收集器是两种低延迟的垃圾回收器,它们通过并发阶段与应用线程(Mutator)同时运行,以减少暂停时间。为了维持并发垃圾回收的正确性,二者采 阅读全文
posted @ 2024-12-11 18:12 Eiffelzero 阅读(179) 评论(0) 推荐(0)
摘要:为什么 G1 垃圾收集器不维护年轻代到老年代的记忆集? 在 G1 垃圾收集器中,不维护年轻代到老年代的记忆集(Remembered Set, RSet)是因为其设计特点和优化策略使得这种记忆集的维护既不必要也无意义。 1. G1 的设计特点 1.1 分区化设计 G1 将堆划分为多个大小固定的分区(R 阅读全文
posted @ 2024-12-11 18:08 Eiffelzero 阅读(135) 评论(0) 推荐(0)
摘要:Java 的 CMS 垃圾回收器和 G1 垃圾回收器在记忆集的维护上的不同 记忆集(Remembered Set, RSet)是垃圾回收器用来跟踪跨代引用的重要结构,它记录老年代对象对新生代对象的引用。CMS 和 G1 垃圾回收器在记忆集的维护方式和粒度上有显著差异。 1. CMS 垃圾回收器的记忆 阅读全文
posted @ 2024-12-11 18:05 Eiffelzero 阅读(153) 评论(1) 推荐(0)
摘要:JVM 新生代垃圾回收如何避免全堆扫描? 在 JVM 新生代的垃圾回收(Minor GC)过程中,为了提高效率并减少回收时间,垃圾收集器会避免对整个堆(包括新生代和老年代)进行扫描。以下是 JVM 如何实现这一优化的核心机制。 1. 全堆扫描的代价 全堆扫描意味着垃圾回收器需要遍历整个老年代的对象, 阅读全文
posted @ 2024-12-11 17:51 Eiffelzero 阅读(155) 评论(0) 推荐(0)
摘要:为什么 Java 中某些新生代和老年代的垃圾收集器不能组合使用? 在 JVM 中,新生代和老年代的垃圾收集器是分工协作的。然而,并非所有的新生代和老年代垃圾收集器都能任意组合使用,这是由于它们的设计目标、算法特性和交互方式不兼容所导致的。例如,新生代的 ParNew 和老年代的 Parallel O 阅读全文
posted @ 2024-12-11 17:34 Eiffelzero 阅读(75) 评论(0) 推荐(0)
摘要:为什么 Java 中 CMS 垃圾收集器在发生 Concurrent Mode Failure 时的 Full GC 是单线程的? 在 CMS(Concurrent Mark-Sweep)垃圾收集器中,当发生 Concurrent Mode Failure 时,JVM 会执行一次 Full GC。与 阅读全文
posted @ 2024-12-11 17:14 Eiffelzero 阅读(110) 评论(0) 推荐(0)
摘要:JVM 垃圾回收时产生的 concurrent mode failure 的原因是什么? 在 JVM 中,concurrent mode failure 是垃圾回收器(通常是 CMS,即 Concurrent Mark-Sweep GC)在执行并发垃圾回收时,因老年代空间不足导致的失败。这种失败会迫 阅读全文
posted @ 2024-12-11 16:55 Eiffelzero 阅读(395) 评论(0) 推荐(0)
摘要:什么是 Java 的 PLAB(Promotion Local Allocation Buffer)? PLAB 全称是 Promotion Local Allocation Buffer,是 Java 垃圾回收机制中的一个重要概念,主要用于优化 对象晋升(Promotion)的性能。PLAB 是在 阅读全文
posted @ 2024-12-11 16:44 Eiffelzero 阅读(432) 评论(0) 推荐(0)
摘要:什么情况下会触发 Java 的 Full GC? Full GC(完全垃圾回收)是 Java 中的一个重要垃圾回收阶段,它会回收 整个堆内存,包括 新生代 和 老年代。触发 Full GC 的条件通常比 Young GC 更为复杂且影响较大,因为它会导致 JVM 停顿时间较长。下面是一些常见的触发 阅读全文
posted @ 2024-12-11 15:46 Eiffelzero 阅读(1533) 评论(0) 推荐(0)