文档章节

Erlang Term sharing

rongtou
 rongtou
发布于 2016/11/20 22:08
字数 307
阅读 18
收藏 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

rongtou

粉丝 5
博文 9
码字总数 4533
作品 0
广州
程序员
私信 提问
[Erlang 0013]抓取Erlang进程运行时信息

[Erlang 0012]Erlang Process input queue 一文我们提到使用erlang:processinfo/1抓取进程运行时状态信息,有时我们需要把节点内所有的进程的信息都抓取下来,便于分析整个节点内进程的运行状...

唐玄奘
2017/12/03
0
0
【原创】Erlang 之 match 和 compare equal

在学习 Erlang 过程中,经常会遇到以下两个和比较相关的操作:match 和 compare equal 。现作如下解释: 当两个 Erlang term 拥有完全相同类型和值时,我们称它们 match 。例如:1 match 1 为...

摩云飞
2013/02/04
0
3
收藏的博客 -- erlang学习

一、技术博客 http://blog.csdn.net/erlib 为什么我要选择erlang+go进行服务器架构(1) 为什么我要选择erlang+go进行服务器架构(2) http://www.qingliangcn.org/ https://github.com/qinglian...

libaineu2004
2017/09/14
0
0
[Erlang 0055] Erlang Shared Data using mochiglobal

%% @doc Abuse module constant pools as a "read-only shared heap" (since erts 5.6) Erlang 进程之间的消息发送都是通过数据拷贝实现的,只有一个例外就是同一个Erlang节点内的 refc binar...

唐玄奘
2017/12/10
0
0
Ejabberd 15.02 发布,支持 Elixir 语言

为了简化,标准化插件的开发, 15.02 引入了对 Elixir 语言的支持, 现在可以用Elixir开发Ejabberd的插件了. 新版本做了如下几个变更: 添加Elixir支持, 允许使用Elixir语言开发插件 增加了新命令...

麦地兜兜
2015/02/26
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

Apache日志不记录访问静态文件,访问日志切割,静态元素过期时间设置

Apache配置不记录访问静态文件的日志 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 vhost原始配置 <VirtualHost *:80> ServerAdmin test@163.com DocumentRoo...

野雪球
今天
1
0
聊聊storm的ICommitterTridentSpout

序 本文主要研究一下storm的ICommitterTridentSpout ICommitterTridentSpout storm-core-1.2.2-sources.jar!/org/apache/storm/trident/spout/ICommitterTridentSpout.java public interface......

go4it
今天
2
0
Ubuntu常用操作

查看端口号 netstat -anp |grep 端口号 查看已使用端口情况 netstat -nultp(此处不用加端口号) netstat -anp |grep 82查看82端口的使用情况 查找被占用的端口: netstat -tln netstat -tl...

hc321
昨天
1
0
网站cdn的静态资源突然访问变的缓慢,问题排查流程

1.首先我查看了一下是否自己的网络问题,通过对比其他资源的访问速度和下载速度,确认不是 2.通过ping 和 tracert 判断cdn域名能否正常访问,(最后回想感觉这一步可以省略,因为每次最终能访...

小海bug
昨天
3
0
Mybatis 学习笔记四 MyBatis-Plus插件

Mybatis 学习笔记四 MyBatis-Plus插件 maven依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <ve......

晨猫
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部