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

由于http是无状态的,因此对应用程序的每个请求都会创建一个新对象. Rails如何清理未使用的对象/频率如何?

解决方法

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

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

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...