跳到主要内容

Ruby 内存与 GC 基础

Ruby 使用 GC 自动管理内存。GC 是 Garbage Collection 的缩写,通常翻译为垃圾回收。它会回收程序不再使用的对象。

对象分配

1000.times do
"ruby".upcase
end

这段代码会创建许多临时字符串对象。对象分配越多,GC 压力可能越大。

查看 GC 信息

p GC.stat

GC.stat 会返回当前 GC 统计信息。初学时不需要理解所有字段,但可以知道 Ruby 提供了观察 GC 的入口。

内存问题常见来源

  • 把大量数据一次性读入内存。
  • 长时间保存不再需要的对象。
  • 大数组、大 Hash 持续增长。
  • 缓存没有淘汰策略。
  • 字符串拼接制造大量临时对象。

逐行处理大文件

不推荐:

lines = File.read("huge.log").lines

更稳:

File.foreach("huge.log") do |line|
# process line
end

普通代码先追求清晰

不要因为知道 GC 成本,就把所有代码写得难懂。大多数业务代码先追求清晰;性能敏感路径再关注分配、缓存和数据结构。

小结

Ruby 会自动回收内存,但对象分配仍然有成本。处理大文件、大集合、长时间运行服务时,你要关注内存增长和 GC 压力。