Gc

原文:Erlang进程堆垃圾回收机制

作者:http://blog.csdn.net/mycwq

Gc 分浅扫描 和深度扫描 ,

spawn_opt(Fun, [{min_heap_size, 5000},{min_bin_vheap_size, 100000},{fullsweep_after, 500}])

fullsweep_after控制深扫描的频率

这个参数确定多少次gc后执行一次深度gc,默认值为65536,有点大了

heap分 yong heap  和 old heap,当 Oldheap 不足 就申请内存。

min_heap_size是进程最小堆大小

这个参数两个地方会用到,第一处是erlang初始化进程堆大小,第二处是gc后堆收缩后维持的最小值,min_bin_vheap_size是进程最小虚拟二进制堆大小,这两个参数都是以word为单位。

进程  初始化适当大的初始内存,可以减少轻度gc的次数,减少反复申请和回收内存的开销

 

手动Gc

gc() ->
    [erlang:garbage_collect(P) || P <- erlang:processes(),
                           {status, waiting} == erlang:process_info(P, status)],
    erlang:garbage_collect(),
    ok.
erlang垃圾回收的副作用
前面讲到erlang进程堆的gc是分代gc的,这个只是全局层面的,在底层erlang还是走了标记清除的路子。标记清除这种gc方式是定期执行的,首先gc不够及时,其次,在gc执行期间开销比较大,会引起中断。不过每个erlang进程的堆区域是独立的,gc可以独立进行,加上它内存区域比较小,还有erlang的变量是单次赋值,无需多次追踪,因此,erlang进程gc的延迟不会引起全局的中断
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值