ruby-on-rails – Ruby / Rails垃圾收集

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Ruby / Rails垃圾收集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
由于http是无状态的,因此对应用程序的每个请求都会创建一个新对象. Rails如何清理未使用的对象/频率如何?

解决方法

简单回答: Ruby运行时有一个垃圾收集器.根据运行时(JRuby / JVM分代GC,IronRuby / CLR分代GC,经典Ruby /标记扫描GC),使用不同的算法.但基础知识非常简单:

>根据分配请求,如果“可用内存不足”可用 – GC算法的成分之一是多少 – 那么GC将开始
> GC首先扫描根,它是全局变量和堆栈位置(参数和局部变量),以发现哪些对象仍然存在;它标记了它找到的每个对象
>然后,GC进程查看这些对象内的链接(引用),并递归到那些尚未标记的对象
>然后,GC可以开始移动/复制所有标记的对象,以便在内存中压缩它们
>从新分配发生的“自由指针”被重置为这个压缩的内存块的末尾
>如果仍有“可用内存不足”,则从操作系统分配更多内存
>在扫描过程中未标记的所有旧对象都是垃圾,并通过复制过程和重置空闲指针隐式丢弃.

收集的频率取决于GC的调整,可能受操作系统,物理内存量,操作系统内存压力,用户控制调整,底层平台版本修订,动态优化参数等的影响.大部分它归结为决定酒吧所处的“免费记忆不足”测试,尽管世代收藏家的事情变得更加复杂.

猜你在找的Ruby相关文章