内存管理、垃圾回收与有限状态机详解
内存管理与垃圾回收
在处理性能问题时,若怀疑可通过内存管理来解决,可在调整堆和垃圾回收器设置的同时对系统进行基准测试。以下是一些可更改的与内存相关的选项:
- min_heap_size :设置在触发垃圾回收器(gc)之前进程堆允许增长到的最大大小。此名称具有误导性,它实际上并非最小堆大小,而是触发gc前堆能达到的最大尺寸。
- min_bin_vheap_size :设置进程在共享二进制堆中允许使用的空间的初始和最小大小,当达到该大小后会触发对二进制数据的垃圾回收。
- fullsweep_after :确定在执行一次全堆垃圾回收之前需要进行的分代垃圾回收次数。
BEAM垃圾回收机制
从技术角度讲,Erlang的垃圾回收是一种基于每个进程的分代半空间复制收集器,它结合了Cheney的复制收集算法和全局大对象空间。简单来说,当一个进程用完其堆中分配的所有内存时,BEAM虚拟机将触发垃圾回收,把所有仍在使用的数据(存活数据)复制到一个新堆中,从而释放之前占用的所有空间。
垃圾回收器被称为分代式,是因为堆中经过两次扫描仍存活的数据会从“年轻堆”复制到“老堆”。其假设是,经过两次垃圾回收仍存活的数据很可能在未来的回收中也能存活。垃圾回收器总是从遍历年轻堆中的数据开始,将上一次垃圾回收后存活的数据复制到老堆,并创建一个新的年轻堆来存储剩余数据,原年轻堆中的所有内存将被释放。若年轻堆的垃圾回收无法释放足够的内存(或者没有足够的内存来复制年轻堆中的数据),则会触发全堆垃圾回收,这将检查并释放
超级会员免费看
订阅专栏 解锁全文
1801

被折叠的 条评论
为什么被折叠?



