青云博客 分享、记录

JVM 内存为什么要分新生代,老年代,元空间

JVM之所以将内存划分为新生代、老年代和元空间,是为了实现更有效的垃圾回收和提高Java应用程序的性能。这种内存分代的策略基于以下考虑: 对象生命周期不同: 大多数对象在被创建后不久就会变得不可达,因此它们的生命周期很短。

詹学伟 发布于 2024-04-23

什么是指针碰撞

在Java中,指针碰撞是一种垃圾收集算法中用于分配内存的一种方式。它通常用于实现停顿时间较短的垃圾收集器,如复制算法和标记-清除算法。 指针碰撞的基本思想是将堆内存分为两个区域:一个是已分配的对象区域,另一个是未分配的空闲区域。通过一个指针来分隔这两个区域。当需要分配对象时,垃圾收集器将对象的大小与

詹学伟 发布于 2024-04-22

什么是三色标记(2)?

1.前言 三色标记算法,用于垃圾回收器升级,将STW变为并发标记。STW就是在标记垃圾的时候,必须暂停程序,而使用并发标记,就是程序一边运行,一边标记垃圾。 2. 三色标记算法 2.1.什么是三色: 首先我们需要知道三色标记法就是根据可达性分析

詹学伟 发布于 2024-04-22

什么是安全点

安全点(Safe Point)是指在Java程序执行过程中的某个特定位置,此时所有线程都处于安全状态,即没有执行关键的代码片段,如循环、方法调用等。在安全点上,垃圾回收器可以安全地进行垃圾回收操作,而不会对正在执行的线程产生影响。 为了进行垃圾回收,垃圾回收器需要暂停所有线程的执行,以便检查和回收不

詹学伟 发布于 2024-04-22

什么是三色标记

三色标记是一种用于并发垃圾收集的算法,常用于分代垃圾收集器中的老年代的垃圾回收过程中。它基于对象的可达性来判断对象是否存活,并标记出存活对象。 三色标记算法将对象分为三种状态:白色、灰色和黑色。 白色表示对象尚未被扫描,即未被标记为存活对象。 灰色表示对象已经被扫描,但其引用的其他对象尚未被扫描。

詹学伟 发布于 2024-04-22

JVM为什么使用元空间替换了永久代

虚拟机使用元空间替代了永久代是因为永久代在过去的实现中存在一些问题和限制,而元空间提供了更好的性能和灵活性。以下是一些详细的原因: 内存管理:永久代的内存管理是由虚拟机自身控制的,无法根据应用程序的需求进行动态调整。而元空间使用本地内存进行管理,可以根据应用程序的需求动态分配

詹学伟 发布于 2024-04-22

说下JVM中一次完整的 GC 流程

JVM中的垃圾回收是自动进行的,它的目标是回收不再使用的对象,释放内存空间,并且保证程序的正常运行。下面是一次完整的GC流程的一般步骤: 标记阶段:GC从根对象开始,通过根对象的引用链,标记所有可达的对象。根对象包括活动线程的栈帧中的局部变量、静态变量、JNI引用等。 垃圾标记:在标记阶段完成后,G

詹学伟 发布于 2024-04-22

什么是TLAB

TLAB是Java虚拟机中的一种优化技术,用于提高对象分配的效率。它是一种线程本地的内存分配缓冲区,每个线程在堆上都有自己独立的TLAB。 在Java中,对象的分配通常是通过在堆上分配内存来完成的。为了提高对象分配的效率,Java虚拟机引入了TLAB机制。TLAB会为每个线程预先分配一块内存空间,线

詹学伟 发布于 2024-04-22

说说你对垃圾收集器的理解

垃圾收集器是Java虚拟机的一部分,负责管理内存中的对象,以确保内存的有效使用和回收不再使用的对象。以下是对垃圾收集器的理解: 内存管理:垃圾收集器负责管理Java应用程序的堆内存。堆内存是用于存储Java对象的区域,而垃圾收集器负责分配、回收和释放这些内存。 自动回收

詹学伟 发布于 2024-04-22

说下类加载器机制与双亲委派

Java类加载器机制是JVM用于加载类文件到内存中的核心机制。它采用了一种层级结构和双亲委派模型,确保了类的唯一性和安全性。 类加载机制是类加载器负责将类文件加载到JVM的内存中,使得类可以被实例化和调用。类加载器按照层级结构组织,形成了一个类加载器树。每个类加载器负责加载特定范围的类,通常分为以下

詹学伟 发布于 2024-04-22