JVM中怎么解析JVM分代垃圾回收策略

技术JVM中怎么解析JVM分代垃圾回收策略这篇文章将为大家详细讲解有关JVM中怎么解析JVM分代垃圾回收策略,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。由于不同对象的生

本文将详细解释如何在JVM中分析JVM生成的垃圾收集策略。这篇文章的内容质量很高,我就分享给大家作为参考。希望你看完这篇文章后有所了解。

由于不同对象的生命周期不同,在JVM的垃圾收集策略中有一个生成策略。

JVM分代垃圾回收策略的基础概念

为什么要分代

JVM生成的垃圾收集策略是基于不同对象的生命周期不同这一事实。因此,不同生命周期的物体可以采用不同的收集方式,以提高回收效率。

在运行Java程序的过程中,会产生大量的对象,其中一些对象与业务信息相关,比如Http请求中的Session对象、线程、Socket连接等,这些对象与业务直接挂钩,因此它们的生命周期相对较长。但是仍然有一些对象,主要是程序运行过程中产生的临时变量,它们的生命周期会比较短。比如String对象,由于其不变的类特性,系统会产生大量这样的对象,有些对象甚至可以回收一次。

想象一下,在不区分对象生命周期的情况下,每次垃圾收集都会回收整个堆空间,这需要相对较长的时间。同时,由于每次都需要遍历所有幸存的对象,实际上对于生命周期长的对象来说,这种遍历是无效的,因为它可能已经被遍历了很多次,但它们仍然存在。因此,世代垃圾收集采用分而治之的思想,分世代,将生命周期不同的对象放在不同的世代上,采用最适合的垃圾收集方式在不同的世代进行回收。

如何分代

如图所示:

JVM中怎么解析JVM分代垃圾回收策略

虚拟机分为三代:年轻一代、老一代和永久一代。持久化生成主要存储Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻一代和老一代的划分对垃圾收集有很大的影响。

年轻代:

所有新生成的对象都首先放在年轻一代中。年轻一代的目标是尽快收集那些生命周期短的物品。年轻一代分为三个区。一个伊甸园区域和两个幸存者区域(一般来说)。大多数对象都是在伊甸园区域生成的。当伊甸园区域满了,幸存的对象将被复制到幸存者区域(两者之一);当这个幸存者区域被填满时,这个区域中幸存的对象将被复制到另一个幸存者区域;当此幸存者区域已满时,从* * *幸存者区域复制的幸存对象将被复制到“终身旧区域”。需要注意的是,《幸存者》的两个区域是对称的,没有顺序关系,所以同一区域可能既有从伊甸园复制的对象,也有从上一个《幸存者》复制的对象,但只有当年旧区域* * *幸存者复制的对象。此外,总是有一个空的幸存者区域。同时,根据节目的需要,Survivor区域可以配置为多个(两个以上),这样可以增加对象在年轻一代的存在时间,减少被放置在老一代的可能性。

年老代:

年轻一代垃圾收集n次存活下来的人,会被放到老一辈。因此,可以认为老一代存储的所有对象都有很长的生命周期。

持久代:

用来存储静态文件,现在是Java类、方法等。持久化生成对垃圾收集没有显著影响,但有些应用程序可能会动态生成或调用一些类,如Hibernate等。在这种情况下,需要设置一个相对较大的持久生成空间来存储运行过程中新添加的这些类。持久生成大小由-XX:MaxPermSize=设置。

什么情况下触发JVM分代垃圾回收

因为对象是分代处理的,所以垃圾收集的区域和时间是不同的。GC有两种类型:清除GC和完全GC。

ScavengeGC

一般来说,当一个新的对象生成,并且在伊甸园中的空间申请失败时,它会触发清除GC,在伊甸园区域执行GC,清除非生物对象,并将幸存的对象移动到幸存者区域。然后组织幸存者的两个区域。这样的GC是在年轻一代的伊甸园地区进行的,不会影响到老一辈。因为大部分对象都是从伊甸园区域开始的,而伊甸园区域不会被分配太多,所以伊甸园区域的GC会频繁进行。因此,这里一般需要使用快速高效的算法,让伊甸园尽快闲置。

FullGC

整理整个堆,包括年轻,拉伸和烫发。FullGC比cleave GC慢,因为它需要回收整个对,所以应该尽可能减少FullGC的数量。在调优JVM的过程中,很大一部分工作是调整FullGC。FullGC可能由以下原因引起:

老年一代(终身职位)已满。

烫发写满。

显示并调用System.gc()。

上次GC后,Heap的各个域分配策略动态变化。

如何分析JVM中JVM生成的垃圾收集策略,希望在此分享。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/44229.html

(0)

相关推荐

  • java如何集成小米推送服务

    技术java如何集成小米推送服务这期内容当中小编将会给大家带来有关java如何集成小米推送服务,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。集成小米推送服务这类推送一般官方文档都比较详

    攻略 2021年10月20日
  • MySQL如何删除多表关联

    技术MySQL如何删除多表关联这篇文章主要介绍MySQL如何删除多表关联,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 在MySQL中,删除关联的多张表,可以使用下面S

    攻略 2021年10月30日
  • Composer安装配置的过程分析

    技术Composer安装配置的过程分析Composer安装配置的过程分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 Wi

    攻略 2021年10月27日
  • sparklines是什么意思(sparklines的BoxPlot是什么)

    技术sparklines的BoxPlot是什么本篇内容主要讲解“sparklines的BoxPlot是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sparklines的

    攻略 2021年12月16日
  • 怎么创建PHP DI容器

    技术怎么创建PHP DI容器这篇文章主要讲解了“怎么创建PHP DI容器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么创建PHP DI容器”吧!

    攻略 2021年12月1日
  • 抖音买10000粉要多少钱,抖音在哪里花钱买粉丝?

    技术抖音买10000粉要多少钱,抖音在哪里花钱买粉丝?关于到现在教大家抖音真人粉购买的方法这个话题,相信很多小伙伴都是非常有兴趣了解的吧,因为这个话题也是近期非常火热的,那么既然现在大家都想要知道教大家抖音真人粉购买的方

    测评 2021年11月10日