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的内存管理 ...
随机推荐
- pytorch错误:RuntimeError: received 0 items of ancdata解决
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com RuntimeError: received 0 items of ancdata错误是在datalo ...
- PHP7.0-PHP7.3新特性与变更
到目前为止,PHP7发布已经升级到7.3,本文来总结一下每个版本的变更与新特性 PHP7.0 1. 组合比较符 (<=>) 组合比较符号用于比较两个表达式.当$a小于.等于或大于$b时它分 ...
- c提高第五次作业
重写结构体嵌套一级指针老师和二级指针学生的代码 //结构体类型,每个导师有三个学生 typedef struct Teacher { char *tName; //导师 char **stu; //三 ...
- knnsearch
转载:https://blog.csdn.net/bushixiaofan/article/details/27700299 K近邻算法是找到K个最近的邻居. IDX = knnsearch(X,Y) ...
- asp.net动态为网页添加关键词的代码
如下资料是关于asp.net动态为网页添加关键词的代码,希望能对小伙伴们有较大用.HtmlMeta keywords = new HtmlMeta();keywords.Name = "ke ...
- -bash: fork: Cannot allocate memory 问题的处理
今天生产机器突然无法登录了,正好有一个用top挂着,但是退出top,执行任何命令都报-bash: fork: Cannot allocate memory,但是查看内存还是有很多空闲,然后在百度上查了 ...
- 【BZOJ2721】樱花(数论)
[BZOJ2721]樱花(数论) 题面 BZOJ 题解 先化简一下式子,得到:\(\displaystyle n!(x+y)=xy\),不难从这个式子中得到\(x,y\gt n!\). 然后通过\(x ...
- CCF201812-3 CIDR合并
按题意模拟即可...主要CCF吞代码... #include<bits/stdc++.h> #define pb push_back #define mp make_pair #defin ...
- (十一)QPainter绘图, QPixmap,QImage,QPicture,QBitmap
#include "widget.h" #include "ui_widget.h" #include <QPainter> #include &l ...
- vue 中的通过搜索框进行数据过滤的过程
<template> <div> <input type="text" v-model="searchId" placeholde ...