"""
今日内容:详解内存管理
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、分代回收机制

day09 详解内存管理机制的更多相关文章

  1. ARC内存管理机制详解

    ARC在OC里面个人感觉又是一个高大上的牛词,在前面Objective-C中的内存管理部分提到了ARC内存管理机制,ARC是Automatic Reference Counting---自动引用计数. ...

  2. object-c(oc)内存管理机制详解

    1.内存的创建和释放 让我们以Object-c世界中最最简单的申请内存方式展开,谈谈关于一个对象的生命周期.首先创建一个对象: 1 2 3 //“ClassName”是任何你想写的类名,比如NSStr ...

  3. IOS中内存管理机制浅解

    我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是 由系统自己管理的,放在栈上).如果一个对象创建并使用后没有得 ...

  4. python的内存管理机制

    先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量 ...

  5. Spark内存管理机制

    Spark内存管理机制 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行 ...

  6. python的内存管理机制(zz)

    本文转载自:http://www.cnblogs.com/CBDoctor/p/3781078.html 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计 ...

  7. 一文洞悉JVM内存管理机制

    前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习导图: 一.为什么要学习内存管理? Java与C++之间有一堵由内存动态分配和垃圾回收机制所围成的高墙,墙 ...

  8. Linux mem 2.4 Buddy 内存管理机制

    文章目录 1. Buddy 简介 2. Buddy 初始化 2.1 Struct Page 初始化 2.2 Buddy 初始化 3. 内存释放 4. 内存分配 4.1 gfp_mask 4.2 nod ...

  9. Python内存管理机制及优化简析(转载)

    from:http://kkpattern.github.io/2015/06/20/python-memory-optimization-zh.html 准备工作 为了方便解释Python的内存管理 ...

随机推荐

  1. .a 文件 和 so 文件

           所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分.当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源..so文件是共 ...

  2. Photoshop给草坪上的人物加上唯美的紫色霞光

    最终效果 1.打开原图素材大图,创建可选颜色调整图层,对黄色,绿色进行调整,参数设置如图1,2,效果如图3.这一步给地面部分增加橙黄色. <图1> <图2> <图3> ...

  3. 一入OI深似海 1 —— 偶然遇见,命运选择

    记得还是三年级(还是四年级?人老了都忘了)吧, 那时候我还是个愣头青, 学校的编程班在每个班强制招人, 我就屁颠屁颠被赶去去上课了. 一开始的课完全听不懂, 导致没过多久我同班的人一个个走了, 我为了 ...

  4. lazyMan

    class Lazyman { constructor() { this.tasks = []; this.init(); } init() { const task = () => { con ...

  5. 仿 ELEMENTUI 实现一个简单的 Form 表单

    原文:仿 ElmentUI 实现一个 Form 表单 一.目标 ElementUI 中 Form 组件主要有以下 功能 / 模块: Form FormItem Input 表单验证 在这套组件中,有 ...

  6. odoo 配置文件参数大全

    odoo 数据库配置文件参数 [options] ; addons模块的查找路径 addons_path = E:\GreenOdoo8.0\source\openerp\addons ; 管理员主控 ...

  7. What Kind of Friends Are You? ZOJ 3960

    比赛的时候用vector交集做的...情况考虑的不全面  wrong到疯 赛后考虑全了情况....T了 果然 set_intersection  不能相信 嗯 不好意思 交集a了  第二个代码 求出来 ...

  8. [LVM]创建LVM卷

    https://www.cnblogs.com/softidea/p/5147090.html

  9. Jenkins安装后无法安装插件

    处理方法 Jenkins -- 管理插件 -- 高级 -- 升级站点 将URL 中的https 改为 http

  10. 如何安装多个mysql 或者如何更改mysql服务名

    此教程适合免安装版本(压缩包)的mysql: 有的时候你需要一台计算机上安装不同的mysql版本,而不同版本的mysql服务名称都是mysql,安装时会有冲突 解决的办法就是安装的时候更改名字 在命令 ...