`
litaocheng
  • 浏览: 337729 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于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项目相关文档

个人理解,不同之处请多指正。
分享到:
评论

相关推荐

    Erlang并发编程,Erlang程序设计,Erlang中文手册

    Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。  Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...

    erlang中文基础教程

    用户可以在 Erlang Shell 中输入命令,例如数学运算符号,函数调用等。Erlang Shell 提供了一个交互式的环境,用户可以实时查看输出结果。 2. 顺序编程 顺序编程是 Erlang 编程语言的基础,用户可以使用 Erlang ...

    Erlang中文手册.pdf

    手册是一份关于Erlang/OTP R11B版本的官方文档的中文翻译,由Dino Wu翻译,邮箱为***和***,仅供学习使用,并不用于商业目的。翻译工作是分阶段进行的,并非一次性全部完成。 ### 入门部分 #### 1.1 简介 - **...

    erlang 中文基础教程

    Erlang Shell是Erlang编程语言提供的一种交互式编程环境,允许开发者直接在命令行中编写、执行Erlang代码并观察结果。无论是Linux、UNIX还是Windows操作系统,Erlang Shell都能顺利运行。只需在命令行中输入`erl`...

    erlang中dns解析

    以下是关于Erlang中DNS解析的一些核心知识点: 1. **inet** 模块:Erlang的标准库包含了`inet`模块,它提供了一系列的函数用于网络相关的操作,包括DNS查询。例如,`inet:gethostbyname/1,2`函数可以用来获取主机名...

    erlang 中文乱码

    在IT行业中,Erlang是一种强大的并发编程语言,主要用于构建高可用性、容错性和分布式系统。当我们在处理中文字符时,特别是在Erlang环境中,可能会遇到“中文乱码”的问题。这个问题通常与字符编码、文件读写以及...

    硝烟中的erlang

    诊断以及调试生产环境中的Erlang 系统。在程序员学习新的语言和环境时,都需要一个摸索 阶段,也就是学会在社团的帮助下,脱离指南,解决实际问题。 本书假设读者精通基本的Erlang和OTP框架。在本书中,会对一些难以...

    erlang 中进程

    在Erlang中,进程是并发执行的基本单元,它们轻量级且独立,彼此通过消息传递进行通信。下面将详细介绍Erlang中的进程以及如何使用它们进行并发开发。 1. 进程概念 在Erlang中,进程不同于操作系统中的线程或进程。...

    <27>erlang record

    标题中的“&lt;27&gt;erlang record”可能指的是Erlang编程语言中的Record特性,它是一种数据结构,类似于结构体或者哈希表,用于组织和操作数据。在Erlang中,Record提供了一种方便的方式来定义和访问具有固定字段的数据...

    erlang编程 Introducing Erlang

    Erlang中的链接(Linking)和监控(Monitoring)机制允许进程间建立关系,以便在另一进程崩溃时得到通知。链接用于追踪相关进程的状态,而监控则可以观察进程的生存状态。 ### 5. 消息传递 Erlang的进程间通信主要...

    erlang 中文,chm参考文档

    4. **模式匹配**:Erlang中的模式匹配是其语法的一大特色,用于在函数定义中解构复杂的数据结构。 5. **错误处理**:讲解Erlang的异常处理机制,如try-catch-finally语句。 6. **模式和类型**:涵盖模式匹配和类型...

    Erlang 中的Module级别热部署

    在Erlang编程环境中,模块级别的热部署是一项关键特性,它允许开发者在不中断系统运行的情况下更新或替换已加载的模块。这对于实时系统和高可用性服务尤其重要,因为它们需要持续提供服务而不能因为代码更新而停机。...

    erlang25.0 windows版本

    3. **环境变量**:安装过程中,安装程序可能会自动添加Erlang的bin目录到系统的PATH环境变量中,确保命令行可以识别`erl`等Erlang命令。 4. **验证**:安装完成后,打开命令行窗口并输入`erl`,如果Erlang成功安装,...

    erlang_版本24.3.4.4

    - **模式匹配**:Erlang的模式匹配功能允许在函数定义中使用模式来匹配和解构数据结构,简化了代码编写。 - **OTP(开放电信平台)**:Erlang OTP是一套库和设计原则,提供了构建可靠系统的框架,包括Mnesia数据库...

    在erlang项目中使用protobuf例子

    标题中的“在erlang项目中使用protobuf例子”指的是在Erlang编程环境中使用Protocol Buffers(protobuf)这一数据序列化工具。protobuf是由Google开发的一种高效、跨语言的数据表示和序列化格式,它允许开发者定义...

    Erlang编程规则——中文翻译版本

    本文将对Erlang编程规则的中文翻译版本中的部分内容进行详细解析,包括Erlang术语、SW工程原则、程序、服务器和消息处理、Erlang特殊约定、常见错误以及所需文档约定等。 Erlang术语部分提到了Erlang程序的模块化...

    xiandiao_erlang_Erlang课后习题_

    在Erlang中,程序是由一系列相互独立的函数构成的,它们可以并行执行,提高了系统的性能。 2. **并发与并行**:Erlang的轻量级进程(称为Erlang进程)使得并发编程变得简单。每个进程有自己的堆栈和消息队列,通过...

    Erlang中文手册

    Erlang的设计目标是创建一种能够在大规模并行系统中高效运行、容错性好且易于维护的语言。 **并发编程** Erlang的并发模型基于actor模型,每个进程拥有自己的内存空间,并通过消息传递进行通信。这种模型使得进程...

Global site tag (gtag.js) - Google Analytics