• 垃圾回收与算法


    垃圾回收与算法

    一、垃圾回收机制

    1.1、引用计数法

      在java中引用和对象是有关联的。如果要操作对象必须用引用进行。因此。很简单的办法是通过引用计数来判断一个对象是否可以回收。即一个对象如果没有任何与之关联的引用,即他们的引用计数都为0,则说明对象没有被引用,即不可达对象,就是可回收对象

      引用计数存在循环引用的问题,写一个类,创建两个对象,

    MyObject myObject1 = new MyObject();
    MyObject myObject2 = new MyObject();
    myObject1、myObject2分别记录了对象的地址,所以对象被创建出来,引用计数就是1,再让他们互为引用,那么这两个对象的引用计数都是2,他们就无法被回收。

    1.2、可达性分析

      为了解决引用计数的循环引用问题,java使用了可达性分析的方法。通过一系列的“GC ROOT”对象作为起点搜索。如果在“GC ROOT”和一个对象之间没有可达路径,则称该对象是不可达的。

       GC ROOT:VM栈中的引用、方法区中的静态引用、JNI(本地方法调用,与其他语言的通信)中的引用

    二、垃圾回收算法

    标记清楚、复制、标记整理、分代收集

    标记清除:

      最基础的清除算法,先扫描一轮,标记出需要清除的数据,第二轮,清除掉标记的数据,这种方法,会造成碎片化,后续大的对象可能找不到地方存储。

    复制算法:

      始终有一块空白空间,是用来存储复制过来的所有的存活的对象。然后将其余空间的对象全部清除就好了,这种算法简单方便,而且不会有碎片化,但是可用内存被压缩了,而且对象增多的话,复制效率会下降。

    标记整理:

      标记后,不清理对象,而是将存活对象移向内存的一端,然后清除端边界外的对象,也就是存活对象和可回收对象,进行位置的替换和移动,直到存活对象被整理到最左端,然后再清除掉存活对象边界以外的可回收对象。

    分代收集算法

      即新生代使用复制算法,老年代使用标记整理算法

  • 相关阅读:
    APP性能之终端兼容优化分享
    Java反射机制
    语音编码的WAVE文件头格式剖析
    【原创】ASP.NET MVC3开发中遇到问题以及解决方法
    linux常用命令(基础)
    vue中粘贴板clipboard的使用方法
    解决部署zabbix中zabbixagent的状态为灰色现象
    IAR Embedded Workbench for ARM: Porting code from V4 to V5 ( for stm32)
    MSDN帮助文档 "无法显示该网页" 的问题解决方案(转)
    二叉排序树求每个结点平衡因子程序
  • 原文地址:https://www.cnblogs.com/gushiye/p/13945101.html
Copyright © 2020-2023  润新知