美文网首页
日更挑战-java虚拟机之对象回收(GC)

日更挑战-java虚拟机之对象回收(GC)

作者: 愿你我皆是黑马 | 来源:发表于2021-05-24 23:30 被阅读0次

越不懂的越爱装
大家都同等:IT世界没有难不难,只有是否了解过

挑战目录

什么是gc

指JVM用于释放那些不再使用的对象所占用的内存。

如何确定不再使用的对象

  • 由于引用太弱:Java中引用分为强引用、软引用、弱引用、虚引用。

    强引用:无论什么情况下,只要有强引用。则不会被回收。

    软引用:当发生要发生内存溢出前,才进行回收。

    弱引用:若对象只被弱引用及更低的持有,无论内存是否足够。都会进行回收。

    虚引用:存在的目的是为了监听gc被调用。

  • 引用计数:每当有增加这个对象的引用时,就将计数器加1。减少引用时,计数器就减1。当一个对象的引用计数器为0时,说明没有被其他对象引用,就会被GC回收。
    缺点:因为是只要有被引用就不回收,而不是从"根对象"循环查找下来。对比可达性分析法有着明显的内存泄露的风险。典型的是相互引用的问题。

  • 可达性分析法:从GC Root往下搜索,没有搜到的对象,说明此对象不可用。就会被GC回收。
    可作为GC Root的有:

    1. Java虚拟机栈上栈帧里面的本地变量表(但是一般随着方法的结束自动退出栈了)。
    2. 和1同理,本地方法栈上的引用(一般随着native方法的结束自动退出栈了)。
    3. 方法区中的运行时常量区的变量引用。
    4. 方法区类静态属性引用的对象。
    5. 虚拟机内部必须引用(比如系统类加载器)。
    6. 被同步锁(synchronized关键字)持有的对象(??TODO 这里补充写解释)。
    7. 反应Java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等(??TODO 这里补充写解释)。
    8. ...

什么时候释放上面确定的不使用了的对象所占的内存


如何释放上面确定的不使用了的对象所占的内存

根据java内存模型,可知java对象大多数情况存储于堆中,方法区的运行时常量池也有一些常量。

  • 回收方法区

回收堆:

  • 堆主要是用来存放对象的。
  • 对象一般可分为朝生夕死的和存活很久的、以及分布于这之间的对象。每次都整个堆进行回收,回收效率会特别低。
  • 所以Java堆一般采取根据分类,采用不同的回收算法进行回收
标记清除算法:

这是java堆回收算法的基础,堆中不同区使用的回收算法都是根据这个算法的不同优化方向优化而来的。


Java堆
  • 回收Eden区(和Survivor共同组成使用 标记复制算法):

  • 回收Survivor区(和Eden共同组成使用 标记复制算法):

  • 回收Old区(标记整理算法):

相关文章

  • 日更挑战-java虚拟机之对象回收(GC)

    越不懂的越爱装 大家都同等:IT世界没有难不难,只有是否了解过 挑战目录[https://www.jianshu....

  • jvm<二> 内存管理

    java虚拟机回收gc roots 查找机制gc roots对象可达, 不会被释放1.虚拟机栈本地变量表引用的对象...

  • JAVA虚拟机

    JAVA虚拟机 垃圾回收主要是回收堆内存。在垃圾回收期(GC)回收之前,需要确定哪些对象可以回收,有以下几种方法:...

  • JAVA与JVM

    JVM(JAVA虚拟机) 虚拟机分为栈和堆: 堆:回收:堆是由GC来负责回收的。存储类型:主要存储对象、静态成员变...

  • LeakCanary源码分析

    LeakCanary原理概述: 在Java中,一个对象不再被任何GC roots引用,那么虚拟机在gc时就会被回收...

  • Java-Android 垃圾回收

    可达性分析算法Java就是使用此方法作为判断对象是否可被回收的。虚拟机会先将一些对象定义为GC Roots,从GC...

  • Android开发从GC root分析内存泄漏

    我们常说的垃圾回收机制中会提到GC Roots这个词,也就是Java虚拟机中所有引用的根对象。我们都知道,垃圾回收...

  • 第三章(一)GC入门

    本篇主要讲述 JAVA与GC 、JAVA与引用 和JAVA对象回收流程 。 垃圾回收(Garbage Collec...

  • Java内存回收机制--Java引用的种类(强引用、弱引用、软引

    Java内存管理包括内存分配(创建Java对象)和内存回收(回收Java对象)。这两者都是JVM(Java虚拟机)...

  • Java虚拟机知识点【引用】

      Java虚拟机采用可达性分析算法来判断对象是否可以回收。可达性分析算法通过一系列的GC Roots对象作为起始...

网友评论

      本文标题:日更挑战-java虚拟机之对象回收(GC)

      本文链接:https://www.haomeiwen.com/subject/xqjhsltx.html