zoukankan      html  css  js  c++  java
  • erlang GC

    二进制存储

    erlang二进制数据在内存中有两种存在形式,当数据大小不到 64 bytes,就直接存在进程堆内,如果超过了64 bytes,就被保存到进程外的共享堆里,可以给节点内所有进程共享。

    erlang有两种二进制容器:heap binaries和refc binaries。

    heap binaries
    这个就是进程堆二进制,是一些比较小的二进制数据,每个数据大小不超过64bytes,这些数据保存在进程堆内。对于这里的二进制数据,垃圾回收走的是进程堆数据的回收机制,参考这里。如果发给其他进程的消息含有这些数据,erlang将直接复制一份到别的进程堆内。

    refc binaries
    官方的叫法是引用计数二进制,就是对于那些超过64bytes的二进制数据,他们如果直接保存在进程堆内,将导致进程频繁的gc,比较大的数据复制来复制去开销也很大。所以,erlang将这些数据保存在进程外的共享堆,再把这个二进制数据的地址给拥有这个数据的进程。所以,进程堆内保存的是这个二进制数据的引用,叫ProcBin。如果进程把这个二进制数据发给其他进程,erlang也不再复制整个二进制数据,而是直接再生成一份ProcBin到别的进程堆内。那么,这个二进制数据就可以多个进程的ProcBin引用,当没有一个ProcBin引用到这个二进制数据,这个二进制就被erlang回收。

    所以,这种二进制数据的gc的是引用计数的回收机制。注意了,ProcBin是进程堆内数据,走的是进程堆数据的回收方式。

    进程间存储 使用分代

  • 相关阅读:
    仿12306客户端
    object-c开发中混合使用或不使用ARC
    Objective-c 的 @property 详解
    iPhone的Push(推送通知)功能原理浅析
    Objective-C内存管理教程和原理剖析3
    IDEA 创建JAVA Maven Web 工程
    Linux CenOS 7 安装Redis
    Linux CenOS 7 安装Tomcat
    Linux CentOS 7 安装wordpress
    Linux CenOS 7 安装JDK
  • 原文地址:https://www.cnblogs.com/unqiang/p/14103664.html
Copyright © 2011-2022 走看看