zoukankan      html  css  js  c++  java
  • 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、分代回收机制

  • 相关阅读:
    [LeetCode 1029] Two City Scheduling
    POJ 2342 Anniversary party (树形DP入门)
    Nowcoder 106 C.Professional Manager(统计并查集的个数)
    2018 GDCPC 省赛总结
    CF 977 F. Consecutive Subsequence
    Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)
    Poj 2337 Catenyms(有向图DFS求欧拉通路)
    POJ 1236 Network of Schools (强连通分量缩点求度数)
    POJ 1144 Network (求割点)
    POJ 3310 Caterpillar(图的度的判定)
  • 原文地址:https://www.cnblogs.com/lice-blog/p/10759036.html
Copyright © 2011-2022 走看看