标签:after 最新 空间 执行 size 超过 垃圾收集 基于 自己
 1.内存的增长主要在binary上
		  1.binary有两处存储位置
			    --1. size <= 64 字节(bytes)时,存储在进程的单独heap中,bianry叫做Heap-binary。
			    --2. size >  64 字节(bytes)时,存储在虚拟机分配出来的单独heap中,bianry叫做Refc-binary。
	  2.gc(Garbage Collection) 垃圾收集器
		    1.Heap的gc------分代的gc
			      1.进程堆里的gc是分代gc,想法基于统计学:大部分的数据生存周期都比较短,最新的数据更容易不再被利用。
				       这里使用young heap 和 old heap来区分数据,young放新数据,old放旧数据,也就是gc后存活的数据
			      2. 进程堆中gc有两个过程:---浅扫描和深扫描
				        1.浅扫描:
					          当young heap空间不足时,erlang会对young heap做一次扫描,把有用的数据复制到新申请的young heap中,扫描过一次的数据
					               放入old heap中,删除原来的young heap .
				        2. 深扫描
					          当old heap空间不足时,eralng会对old heap做一次扫描,把有用的数据放入新申请的young heap中,删除原理的heap(即young heap和old heap)。
					      ============================危=======================================
						      深扫描----可以手动执行gc ,和gc次数超过fullsweep_after的参数限定
						        1.fullsweep-after控制深扫描的频率
							          这个参数确定了多少次gc后执行一次深度gc(深扫描),默认值是65535.
						        2. 手动gc
							          gc() ->
							              [erlang:garbage_collect(P) || P <- erlang:processes(),
							                                 {status, waiting} == erlang:process_info(P, status)],
							              erlang:garbage_collect(),
							               ok.
		    2.Refc的gc------引用计数的gc
			      每当有进程使用这个binary时,在自己进程heap中创建这个binary的引用以外,还要把记录这个binary
			      的引用次数+1,只有当这个binary的引用次数为0时,才会把这个binary从专门的heap中释放。
标签:after 最新 空间 执行 size 超过 垃圾收集 基于 自己
原文地址:https://www.cnblogs.com/ye-jing/p/12886787.html