关于erlang中的garbage collection

在erlang中,每个process都有一个独立的heap(初始大小233个words),process用到的数据都保存在其自身的heap 中。这个heap可以动态的进行扩张与收缩。当heap中的数据达到heap大小的75%的时候,heap的大小会自动增大(依据fibonacci数进行增长,而不是类似某些语言实现中依据倍数增长),当heap中的数据小于heap大小的25%的时候,heap会自动进行缩小(上面涉及到的数据25%,75%可能不是很准确,这无关紧要)。

在erlang中拥有成千上万的process,其garbage collection是针对每个process来实现,每个process独立的运转。与此对应是一个全局的gc的实现,这样很有可能出现gc工作时挂起多个process的情况,这样会极大的影响并发效率。同时,erlang中每个process具有独立的gc机制,在process销毁时,process占用的内存可以轻易的销毁,大大提高process创建,销毁的效率,使process轻量,这在并发环境中也很重要。每个 process具有单独的heap和gc机制,所以process之间不能共享数据,这样可能会产生一定的数据冗余。

对于比较大的binary,在erlang中是保存在另一个专有的heap中,而不是在某个process的heap中。binary基于引用计数实现。

对于process,你可以通过一些方法去减少garbage collection,首先你要了解process大概的heap消耗,(比如通过一些性能分析应用,查看process占用的内存,那么你可以在创建process的时候指定heap的大小),随后调用是spawn_opt/4来创建process,比如spawn_opt(M, F, [], [link, {min_heap_size, 1000}]). 创建一个process,其最小heap为1000个word。注意这里的min_heap_size,需要依据程序设置,建议在程序调优时才使用。

想了解更多erlang的gc实现,参考HIPE项目相关文档

个人理解,不同之处请多指正。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值