Erlang Term sharing
博客专区 > rongtou 的博客 > 博客详情
Erlang Term sharing
rongtou 发表于1年前
Erlang Term sharing
  • 发表于 1年前
  • 阅读 8
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

Erlang虽然变量不可变,但实际上为了节省内存,还是存在Term Sharing数据项共享的。但以下情况时会使共享实效,摘抄自文档。

Shared subterms are not preserved in the following cases:

  • When a term is sent to another process
  • When a term is passed as the initial process arguments in the spawn call
  • When a term is stored in an Ets table

关注内存,自然就会想计算出term在内存中的实际大小,而erlang也提供了相应的方法供我们使用。

erts_debug:size/1erts_debug:flat_size/1 都是不在正式文档中的函数, 可以用来计算erlang数据项在内存中所需要空间。这两个函数区别在于, 在具有共享内存的数据结构中, erts_debug:size/1只计算一次共享的数据大小, 而erts_debug:flat_size/1则会重复计算

文档有说明每种term大小的计算方法。erlang_term这个项目有提供计算出term在内存的大小,是会计算出binary实际占用的部分。不管binary是大于64K时的refc binary,还是在heap上分配那部分。

链接1链接2介绍了因term数据展开后,因sharing失效导致的一些陷阱。

共有 人打赏支持
rongtou
粉丝 5
博文 9
码字总数 4533
×
rongtou
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: