首页 > 其他分享 >浅学JVM

浅学JVM

时间:2024-06-19 11:30:06浏览次数:26  
标签:1.4 ServicorTo MinorGC Eden 对象 浅学 内存 JVM

一、基本概念

目录

一、基本概念

二、JVM 运行时内存

1、新生代

1.1  Eden 区

1.2. ServivorFrom

1.3. ServivorTo

1.4 MinorGC 的过程 (复制- >清空- >互换)

1.4.1:eden 、servicorFrom 复制到ServicorTo,年龄+1

1.4.2:清空eden 、servicorFrom

1.4.3:ServicorTo 和ServicorFrom 互换

2、老年代

3、永久代


JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收, 堆 和 一个存储方法域。 JVM 是运行在操作系统之上的,它与硬件没有直接的交互。

二、JVM 运行时内存

Java 堆从 GC 的角度还可以细分为: 新生代(Eden区、 From Survivor 区和 To Survivor 区)和老年 代。 1、1、

invalid image(图片无法加载)

1、新生代

是用来存放新生的对象。 一般占据堆的 1/3 空间。由于频繁创建对象, 所以新生代会频繁触发 MinorGC 进行垃圾回收。新生代又分为 Eden 区、 ServivorFrom、ServivorTo 三个区。

1.1  Eden 区

Java 新对象的出生地 (如果新创建的对象占用内存很大, 则直接分配到老 年代) 。当 Eden 区内存不够的时候就会触发 MinorGC,对新生代区进行 一次垃圾回收。

1.2. ServivorFrom

上一次 GC 的幸存者,作为这一次 GC 的被扫描者。

1.3. ServivorTo

保留了一次 MinorGC 过程中的幸存者。

1.4 MinorGC 的过程 (复制- >清空- >互换)

MinorGC 采用复制算法。

1.4.1:eden 、servicorFrom 复制到ServicorTo,年龄+1

首先, 把 Eden 和 ServivorFrom 区域中存活的对象复制到 ServicorTo 区域(如果有对象的年 龄以及达到了老年的标准,则赋值到老年代区), 同时把这些对象的年龄+1 (如果 ServicorTo 不 够位置了就放到老年区) ;


1.4.2:清空eden 、servicorFrom

 然后, 清空 Eden 和 ServicorFrom 中的对象;


1.4.3:ServicorTo 和ServicorFrom 互换

 最后, ServicorTo 和 ServicorFrom 互换,原 ServicorTo 成为下一次 GC 时的 ServicorFrom
区。

2、老年代

主要存放应用程序中生命周期长的内存对象。
老年代的对象比较稳定,所以 MajorGC 不会频繁执行。在进行 MajorGC 前一般都先进行 了一次 MinorGC,使得有新生代的对象晋身入老年代,导致空间不够用时才触发。当无法找到足 够大的连续空间分配给新创建的较大对象时也会提前触发一次 MajorGC 进行垃圾回收腾出空间。
MajorGC 采用标记清除算法:首先扫描一次所有老年代,标记出存活的对象,然后回收没 有标记的对象。 MajorGC 的耗时比较长, 因为要扫描再回收。 MajorGC 会产生内存碎片,为了减 少内存损耗, 我们一般需要进行合并或者标记出来方便下次直接分配。当老年代也满了装不下的 时候, 就会抛出 OOM( Out of Memory)异常。

3、永久代

指内存的永久保存区域, 主要存放 Class 和 Meta (元数据) 的信息,Class 在被加载的时候被 放入永久区域 ,它和和存放实例的区域不同,GC 不会在主程序运行期对永久区域进行清理。所以这 也导致了永久代的区域会随着加载的 Class 的增多而胀满,最终抛出 OOM 异常。

标签:1.4,ServicorTo,MinorGC,Eden,对象,浅学,内存,JVM
From: https://blog.csdn.net/w12345ll/article/details/139789231

相关文章

  • jvm必知必会-类的生命周期图文详解
    类的生命周期描述了一个从加载、使用到卸载的过程;而其中的连接部分又分为一下三个阶段:验证准备解析6.1加载阶段Loading阶段第一步是类加载器会根据类全限定名通过不同的渠道以二进制流的方式获取字节码信息,程序员可以使用Java代码扩展不同的渠道。比如通过......
  • 【JVM】详解双亲委派机制
    双亲委派机制是Java类加载器的一种工作模式,确保类加载的一致性和安全性。以下是详细的定义、优缺点以及如何破坏双亲委派机制的描述。双亲委派机制的定义双亲委派机制(ParentDelegationModel)是一种类加载器的工作模式。在这种模式下,类加载器在加载类时,会先将加载请求委派......
  • 【JVM】类的⽣命周期和类加载的过程
    在Java中,类的生命周期和类加载过程是Java虚拟机(JVM)管理的核心部分。类的生命周期包括从类被加载到内存直到类被卸载的整个过程。类加载过程可以细分为多个阶段:加载、链接(包括验证、准备、解析)、初始化和使用。以下是详细的描述:类的生命周期加载(Loading)定义:将类的字节码......
  • 【JVM】G1 垃圾收集器的垃圾收集过程
    G1(GarbageFirst)垃圾收集器是Java虚拟机(JVM)中的一种垃圾收集器,设计目标是提供高吞吐量和低停顿时间的垃圾收集。G1收集器将堆划分为多个大小相等的独立区域(Region),并通过并行和并发的方式进行垃圾回收。G1收集器可以回收年轻代(YoungGeneration)和老年代(OldGeneration)的垃圾......
  • 【JVM】CMS 收集器的垃圾收集过程
    CMS(ConcurrentMark-Sweep)收集器是Java虚拟机(JVM)中的一种垃圾收集器,它主要面向老年代(OldGeneration)的垃圾回收。CMS收集器的目标是最小化垃圾收集的停顿时间,从而提高应用程序的响应性。CMS垃圾收集过程主要分为以下几个阶段:初始标记(InitialMarking):这一阶段标记所有直接......
  • JVM-垃圾回收器-ZGC
    新一代垃圾回收器ZGC的探索与实践-美团技术团队Main-Main-OpenJDKWiki介绍        ZGC(ZGarbageCollector)是一款性能比G1更加优秀的垃圾收集器。ZGC第一次出现是在 JDK11中以实验性的特性引入,这也是JDK11中最大的亮点。在JDK15中ZGC不再是实......
  • JVM 调优和深入了解
    调优的原则1、大多数的java应用不需要GC调优2、大部分需要GC调优的的,不是参数问题,是代码问题3、在实际使用中,分析GC情况优化代码比优化GC参数要多得多;4、GC调优是最后的手目的GC的时间够小GC的次数够少发生FullGC的周期足够的长,时间合理,最好是不发生......
  • JVM之编写高效优雅 Java 程序
    面向对象01、构造器参数太多怎么办?如果参数很多,会导致构造方法非常多,拓展性差,代码难编写,且难以看懂。用JavaBeans模式,get和set一行构造编程多行代码实现,需要使用额外机制确保一致性和线程安全。用builder模式,1、5个或者5个以上的成员变量2、参数不多,但是在未来,......
  • JVM类加载机制
    类加载机制概述类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个部分统称为连接(Link)。初始化的单例......
  • jvm调优工具和调优策略
    JDK为我们提供的jvm工具命令行工具jps、jstat、jinfo、jmap、jhat、jstack可视化工具JMX、Jconsole、visualvm生产服务器推荐开启-XX:-HeapDumpOnOutOfMemoryError默认关闭,建议开启,在java.lang.OutOfMemoryError异常出现时,输出一个dump.core文件,记录当时的堆内存快......