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, 

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



没有更多推荐了,返回首页