不说吴亦凡,谈谈垃圾收集器
Posted 张夷陵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不说吴亦凡,谈谈垃圾收集器相关的知识,希望对你有一定的参考价值。
目录
概念
垃圾收集器是一种动态内存分配器,它自动释放程序不再需要的已分配块。这些块被称为垃圾。自动回收堆存储的过程叫做垃圾收集。
基本知识
垃圾收集器将内存视为一张有向可达图,该图中有一个根节点,所有的变量都会被根节点引用。形式如下图所示:
本文仅讨论John McCarthy独创的Mark-Sweep(标记清除)算法。
Mark-Sweep垃圾收集器
Mark-Sweep垃圾收集器由标记阶段和清除阶段组成。
标记阶段:通过广度扫描,标记与根节点相关(所有可达的和已分配的后继)的结点
清除阶段:将没有被标记的块释放
1.标记阶段伪代码:
void mark(ptr p)
{
if((b=isPtr(p))==NULL)//判断块是否已分配
return;
if(blockMarked(b))//判断块是否已被标记
return;
markBlock(b);//标记块
len=length(b);
for(i=0;i<len;i++)
mark(b[i]);
return;
}
2.清除阶段伪代码
void sweep(ptr b,ptr end)
{
while(b<end){
if(blockMarked(b))//判断块是否已被标记
unmarkBlock(b);//取消标记
else if(blockAllocated(b))//判断块是否已分配
free(b);//释放垃圾
b=nextBlock(b);//返回堆中块的后继
}
return;
}
以上是关于不说吴亦凡,谈谈垃圾收集器的主要内容,如果未能解决你的问题,请参考以下文章
吴亦凡凉凉了,李雪琴正当红! Hadoop凉凉了,Spark正当红!