• day09 详解内存管理机制


    """
    今日内容:详解内存管理
    1、引用计数
      在内存中为了对变量的值进行标记从而方便管理,采用引用计数的方式对变量进行标记。
      (1)如果变量的值被引用一次,那么该变量的引用计数就会 +1
      (2)如果变量的值被解除绑定,那么该变量的引用计数 -1
      (3)如果某个变量的引用计数变为了0,那么在下一次对内存进行检测时就会被标记为可用状态
    
    2、引用计数机制引起的循环引用问题
      在进行变量的引用过程中,如果内存中有两个变量之间进行了互相引用,那么在释放栈区对堆区值得引用时,由于两个值之间存在了相互的引用,
    所以这两个值对应的内存空间的引用计数永远不会为 0 ,该地址永远不会被垃圾回收机制回收,造成内存的泄露
    
    3、解决循环引用造成的内存泄露
        (1)在内存中存在两种内存的管理机制: 垃圾回收机制 、清除机制
        (2)清除机制:在内存中所有能被线程访问的栈区的变量是被 gc roots对象,同时在内存中存在一个阈值,当内存的使用达到阈值时,会启动内存的清除机制,
    此时,所有的 gc roots对象可以访问的堆区对象都被 标记机制 标记为存活状态,被标记为存活状态的值,会被复制到内存的另一块区域,栈区的变量再重新绑定
    新的值地址
        (3)当完成复制后,清除机制会清除原来空间的所有引用计数,全部标记为可用状态
    
    4、分代回收机制  ---> 引用计数的垃圾回收机制的优化
        (1)在内存中,会定期进行内存进行检测,从而回收引用计数为0的空间,但是如果每次都全部进行检测的话会十分费时,所以对内存中的地址进行了分代,通过
    分代提高检测效率
        (2)刚产生的变量是属于新生代的,检测频率较高,当检测的次数达到一定时,会提高其分代,认为其是短时间内不会被清除的数据,降低其检测频率,进入青
    春代。
        (3)会重复二步骤,达到一定的检测次数后就提高其分代,减低其检测频率,从青春代一直到老年代。
    """

    1、引用计数

    2、循环引用问题

    3、标记清除

    4、分代回收机制

  • 相关阅读:
    在linux系统安装tomcat后,bin文件下startup.sh启动不
    利用教育邮箱注册JetBrains产品(pycharm、idea等)的方法
    linux 查看当前系统版本号
    windows 重装系统
    linux rpm方式安装mysql
    官网下载MySQL最新版本的安装包
    Redis随笔
    八大排序算法的java实现
    XML的两种解析方式
    Quartz快速入门
  • 原文地址:https://www.cnblogs.com/lice-blog/p/10759036.html
Copyright © 2020-2023  润新知