首页 > 其他分享 >JVM垃圾回收机制

JVM垃圾回收机制

时间:2022-10-21 11:45:54浏览次数:114  
标签:对象 引用 回收 算法 内存 JVM 垃圾

Jvm虚拟机的垃圾回收机制

1. 垃圾回收发生在哪里?

首先就需要知道Jvm的内存结构了:有五种(方法区、堆、虚拟机栈、本地方法栈、程序计数器);new就进堆,堆存储对象数据,而垃圾回收主要是对内存中已经死亡或者长时间没有使用的对象进行清楚和回收来实现内存空间的有效利用,所以垃圾回收关注的重点区域在于堆。
image

2. 什么时候回收?

针对这一点有两个算法:引用计数器和可达性分析算法

引用计数器:

对对象的引用个数进行计算,增加一个引用+1,减少一个引用-1,当引用计数器为零时,表示对象没有被引用,那么在垃圾回收的时候,就可以被回收掉;

可达性分析算法:

主要根据GCRoots进行判断(GCRoots:只会引用其他队象,而不会被其他对象引用);通过GCRoots向下进行联通,可以联通的即还有用的对象,不能联通的即无引用的对象,可以被回收;

拓展

在JDK1.2之后,引入了强软弱虚四种引用状态:

  1. 强引用:与强引用相关联的对象,不会被回收
  2. 软引用:内存溢出时被回收
  3. 弱引用:只要发生垃圾回收就会被回收
  4. 虚引用:回收时获得一个通知

3. 怎样去回收?

标记-清除算法

先对可回收的垃圾进行标记然后再清理掉,清理掉的垃圾区域就成了未使用的内存区域,但是它有一个很严重的问题,会产生大量的内存碎片,会导致我们没办法去申请一个比较大的连续的内存空间。

复制算法

标记清除算法演化而来,解决了内存碎片问题,首先它将可用内存按容量来划分为大小相等的两块,每次只使用其中的一块,当这一块的内存用完了之后,就把还活着的对象复制到另一块上面去,然后再把已使用过的内存空间一次性清理掉,这样就保证了内存空间的连续可用,也解决了内存碎片的问题,但是也有一个问题,空间必须被拆分为两半,如果有10G内存空间,但是你能分配的最大单个对象却只有5G。

标记-整理算法

它的标记过程依然和标记清除算法一样,但是后续不是直接对可回收对象进行清理,而是让所有存活对象都向一端进行移动,之后再清理掉边界以外的内存区域。这个效率不高,对内存变动频繁,需要整理所有存活对象的引用地址。

分代回收算法

在融合以上三种基础的算法思想之后呢。就诞生了分代回收算法,严格来说,它只是一套组合而已。首先,根据对象存活周期不同,可用将JAVA堆划分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的算法。在新生代,每次垃圾收集时,都有大批对象死去,采用复制算法(效率高),在老年代,死得少,需要操作的次数就不是那么多,可以采用标记清除算法或者标记整理算法。
详细的分代回收以及处理可以看下方的原文,本文主要对网上查阅到的文章进行一个概述!

注:本文主要对网上查阅到的文章进行一个概述
原文链接:https://blog.csdn.net/weixin_44196561/article/details/123908059

标签:对象,引用,回收,算法,内存,JVM,垃圾
From: https://www.cnblogs.com/weiboyaonuli/p/jvm.html

相关文章

  • eclipse设置JVM内存堆
     前言环境不会改变,解决之道在于改变自己。最近笔者再整理堆内存溢出方向的课程,写些杂项资料,留着自用的,有需要的看看~一、JVM内存堆参数含义-Xmx128m#最大内存设......
  • Windows打开回收站的几种方式
    1.桌面双击回收站图标打开回收站,简单、快捷、方便,但在打开多个窗口时候还要最小化这些窗口以显示桌面,如果还要迅速恢复这些窗口的话也算是麻烦2.磁盘每个分区根目录下都......
  • JVM、JDK、JRE你分的清吗
    JVM、JDK、JRE你分的清吗前言在我们学习Java的时候,就经常听到"需要安装JDK"、"运行需要JRE"、"JVM调优"等等,这里面的JVM、JDK、JRE你真的分得清吗,今天我们就来讲讲它们......
  • Java 垃圾回收机制
    一、垃圾回收之标记算法 1.引用计数法通过判断对象的引用数量来决定对象是否被回收每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1  优点:执行效率高,程......
  • 5G 增强型“智能垃圾箱”测试
    英国桑德兰市正在试行多项5G增强型智慧城市技术,包括“智能垃圾箱”。试验期间,在全市范围内安装了许多智能垃圾箱。智能垃圾箱是该市议会与BAICommunications(BAI)合......
  • V8引擎垃圾回收机制
    一、V8引擎是什么?V8引擎是驱动GoogleChrome的JavaScript引擎的名称。是Chrome浏览器和edge浏览器获取我们的JavaScript代码并执行代码的东西。V8提供了JavaSc......
  • 如何提高360评估的问卷回收率?
    在 360评估的整个项目最难以控制的就是问卷的作答率了。通常情况下,很多企业反馈他们如果通过纸质调查来进行,整体回收率能在70%左右,但项目周期常常会拖长至1个月乃至数月......
  • 深入理解JVM(五)-JVM设置参数大全
    标准参数(-)所有的JVM实现都必须实现这些参数的功能,而且向后兼容;命令java-help可以列出java应用启动时标准选项(不同的JVM实现是不同的)。标准参数比较常用的配置参数说明-ve......
  • JAVA获取jvm和操作系统相关信息
    JAVA获取jvm和操作系统相关信息背景今日搬砖......
  • .NET 之 垃圾回收机制GC
    一、GC的必要性1、应用程序对资源操作,通常简单分为以下几个步骤:为对应的资源分配内存→初始化内存→使用资源 →清理资源 →释放内存。2、应用程序对资......