由于http是无状态的,因此对应用程序的每个请求都会创建一个新对象. Rails如何清理未使用的对象/频率如何?
解决方法
简单回答:
Ruby运行时有一个垃圾收集器.根据运行时(JRuby / JVM分代GC,IronRuby / CLR分代GC,经典Ruby /标记扫描GC),使用不同的算法.但基础知识非常简单:
>根据分配请求,如果“可用内存不足”可用 – GC算法的成分之一是多少 – 那么GC将开始@H_403_7@> GC首先扫描根,它是全局变量和堆栈位置(参数和局部变量),以发现哪些对象仍然存在;它标记了它找到的每个对象@H_403_7@>然后,GC进程查看这些对象内的链接(引用),并递归到那些尚未标记的对象@H_403_7@>然后,GC可以开始移动/复制所有标记的对象,以便在内存中压缩它们@H_403_7@>从新分配发生的“自由指针”被重置为这个压缩的内存块的末尾@H_403_7@>如果仍有“可用内存不足”,则从操作系统分配更多内存@H_403_7@>在扫描过程中未标记的所有旧对象都是垃圾,并通过复制过程和重置空闲指针隐式丢弃.
收集的频率取决于GC的调整,可能受操作系统,物理内存量,操作系统内存压力,用户控制调整,底层平台版本修订,动态优化参数等的影响.大部分它归结为决定酒吧所处的“免费记忆不足”测试,尽管世代收藏家的事情变得更加复杂.