Ruby的内存管理机制。

原文在此,多年前的文章了, 不过说的很好~

http://www.theirishpenguin.com/2009/10/29/understanding-how-ruby-stores-objects-in-memory-the-ruby-heap.html

大体思想全部包含, 并非逐句翻译。


Ruby有自己的内存管理机制,叫做Ruby Heaps。他独立于操作系统的System Heap,包含很多Slots, 其中每一个Slots指向一个对象。


Slots本身存储于Ruby Heaps中, 但其指向的对象存储于System Heap中。


例如一个Ruby程序创建了一个50M的字符串, 这时Ruby Heaps中就有一个指向该字符串的Slot, 而真正的字符串存储于System Heap中。

当这一字符串不再被引用时, Slot会在下一次内存清理(GC iteration )中被回收,同时存储50M字符串的内存也会返回给操作系统。


Ruby会在最开始创建一个最小的Ruby Heap, 此后再必要的时候进行Ruby Heaps的创建或销毁。 

每次创建Ruby Heap会是上一个的1.8倍(大小), 而当一个Ruby Heap中的Slot均为空(free Slot)时,该Ruby Heap会被释放(内存被操作系统回收)。


当然, 目前的机制还有一些问题没有解决。比如,当Ruby创建了很多Ruby Heaps 但是他们中大部分都只包含少量有效的Slot, 

此时如果能够将他们整合到一起, 将会释放大量内存。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值