文档章节

Erlang Term sharing

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

rongtou

粉丝 5
博文 9
码字总数 4533
作品 0
广州
程序员
【原创】Erlang 之 match 和 compare equal

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

摩云飞 ⋅ 2013/02/04 ⋅ 3

[Erlang 0013]抓取Erlang进程运行时信息

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

唐玄奘 ⋅ 2017/12/03 ⋅ 0

4.顺序编程进阶

BIF(built-in function)内建函数的使用 内建函数是erlang虚拟机的一部分,通常完成用erlang无法完成的任务,非常高效,尽量使用。 BIF 在erlang模块中定义,已经预导入 例子: 元组转化为列表...

sinpo ⋅ 2012/02/29 ⋅ 0

收藏的博客 -- 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

Erlang错误处理翻译片段

Before we go into details of the supervision and error handling in an Erlang system, we need see how Erlang processes terminate, or in Erlang terminology, exit. 我们先来看看Erl......

摩云菜 ⋅ 2013/09/13 ⋅ 1

[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

【转】Erlang基本数据类型

在讲述数据类型前先简单的介绍一下Erlang中的变量,Erlang中的变量和其他语言中的变量相比有三点不同: 1.Erlang不对变量的类型进行定义,它可以被赋值成任何类型的值,Erlang中所有类型的值...

摩云菜 ⋅ 2014/09/16 ⋅ 0

Recursion and Tail Recursion in Java and Erlang

Typical Recursion Example (hanoi problem) public void move(int n, String strFrom, String strTemp, String strTo) { if (n == 1) { show(1, strFrom, strTo); } else { move(n - 1, str......

iamtwang ⋅ 2014/08/23 ⋅ 1

Ejabberd 15.02 发布,支持 Elixir 语言

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

麦地兜兜 ⋅ 2015/02/26 ⋅ 3

Flyweight pattern『 享元模式』

Flyweight is a software design pattern. A flyweight is an object that minimizes memory use by sharing as much data as possible with other similar objects; it is a way to use obj......

tonyley ⋅ 2012/03/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 昨天 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部