gpt4 book ai didi

ruby-on-rails - 内存在 Ruby 中是如何工作的?

转载 作者:IT王子 更新时间:2023-10-28 23:38:25 26 4
gpt4 key购买 nike

我试图理解Ruby 中的内存使用 背后的想法。我目前正在解决我的 Rails Web 应用和 API 的内存问题。

这是一个简单的问题:

如果我像这样在一个变量中加载许多记录:

users = User.where(work: 'cook')

这可能会在我使用此变量时保留在我的应用程序的内存中,对吧?

但是在我在代码中使用完变量后,通过执行以下操作来释放内存是否有帮助?

users = nil

感谢您的帮助。我也愿意回答有关更广泛主题的问题。

最佳答案

是的,将 users 设置为 nil 确实会减少所需的内存(非常轻微),但这不是必需的,因为垃圾收集器最终会清除它。在生产中,您应该假设您的 Ruby 进程将始终随着时间增长,并且如果您担心内存管理,应该定期重新启动。与随时间的增长相比,您在 ruby​​ 中看到的最大堆空间减少量是最小的,因此我不会担心将大型集合设置为 nil 以在 GC 扫描之前稍微节省一些字节无论如何。 Ruby 在由堆页组成的堆空间中分配对象。假设您使用的是 Ruby2.1 或更高版本,堆空间分为已用(又名 Eden)和空(又名 Tomb)堆页面。实例化对象时,ruby 首先在 eden 页面中查找可用空间,只有在没有可用空间时才会从 tomb 中获取页面。然后,当您用 nil 覆盖对象时,这些堆页面将被添加回 tomb。将页面从伊甸园移动到坟墓会稍微减少堆大小,但 Ruby 的垃圾收集器不会大幅减少它,因为它假设如果您之前创建过大量对象,您会再次这样做。我推荐深入研究的一本书是“Ruby Performance Optimization”,因为它深入探讨了 ruby​​ 的垃圾收集器。

关于ruby-on-rails - 内存在 Ruby 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50048840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com