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、分代回收机制

day09 详解内存管理机制的更多相关文章
- ARC内存管理机制详解
ARC在OC里面个人感觉又是一个高大上的牛词,在前面Objective-C中的内存管理部分提到了ARC内存管理机制,ARC是Automatic Reference Counting---自动引用计数. ...
- object-c(oc)内存管理机制详解
1.内存的创建和释放 让我们以Object-c世界中最最简单的申请内存方式展开,谈谈关于一个对象的生命周期.首先创建一个对象: 1 2 3 //“ClassName”是任何你想写的类名,比如NSStr ...
- IOS中内存管理机制浅解
我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是 由系统自己管理的,放在栈上).如果一个对象创建并使用后没有得 ...
- python的内存管理机制
先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计数 (3)内存池机制 一.垃圾回收: python不像C++,Java等语言一样,他们可以不用事先声明变量 ...
- Spark内存管理机制
Spark内存管理机制 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行 ...
- python的内存管理机制(zz)
本文转载自:http://www.cnblogs.com/CBDoctor/p/3781078.html 先从较浅的层面来说,Python的内存管理机制可以从三个方面来讲 (1)垃圾回收 (2)引用计 ...
- 一文洞悉JVM内存管理机制
前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习导图: 一.为什么要学习内存管理? Java与C++之间有一堵由内存动态分配和垃圾回收机制所围成的高墙,墙 ...
- 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 ...
- Python内存管理机制及优化简析(转载)
from:http://kkpattern.github.io/2015/06/20/python-memory-optimization-zh.html 准备工作 为了方便解释Python的内存管理 ...
随机推荐
- Redis进阶之使用Lua脚本开发
1.在Redis中使用Lua 在Redis中执行Lua脚本有两种方法:eval和evalsha. (1)eval eval 脚本内容 key个数 key列表 参数列表 下面例子使用了key列表和参数列 ...
- 类StringBuilder
StringBuilder概述 因为字符串的底层是一个被final修饰的数组,不能改变,是一个常量.所以每当进行字符串拼接时,总是会在内存中创建一个新的对象.由此可知,如果对字符串进行拼接操作,每次拼 ...
- 关于win7+VS2017环境下的opencv-contirb配置的一个坑
问题出现背景: 由于课题需要用到SURF detector, 我依照网上的一下教程,把opencv-contrib的配置了一遍.但是,当我写了一个小demo来测试模块是否能正常使用的时候,程序能正常编 ...
- MR-join连接
package com.bw.mr; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...
- 【问题解决方案】pygame生成的窗口点右上角关闭按钮未响应问题的解决
pygame生成的窗口点右上角关闭按钮未响应问题的解决: 可在 sys.exit() 前面加上 pygame.quit()
- sql是最成功的第四代语言
SQL发展的前世今生 很多年前,两名年轻的IBM研究员将一门关系型语言带到了数据库领域,旨在使用声明性的方式来操作数据.从Don Chamberlin和Ramond Boyce发表"SEQU ...
- Python进阶6---序列化与反序列化
序列化与反序列化*** 为什么要序列化 ? 定义 pickle库 #序列化实例 import pickle lst = 'a b c'.split() with open('test.txt','wb ...
- jmeter 安装
3.1 windows10环境下测试工具jmeter安装与配置 3.1.1下载安装java 浏览器中打开链接:http://down-www.7down.net/pcdown/soft/xiazai/ ...
- mysql原生语句基础知识
要操作数据库,首先要登录mysql: *mysql -u root -p 密码 创建数据库: *create database Runoob(数据库名); 删除数据库: *drop database ...
- Jetson TX1刷机
刷机流程 https://blog.csdn.net/c406495762/article/details/70786700 注意:教程中包含两步,首先安装Ubuntu系统,然后重启安装程序,安装其他 ...