当我运行ruby程序时,我假设变量存储在RAM中。除了由于缺少RAM而必须页面时,它们是否会被存储在硬盘上?我认为堆栈和堆是相关的,我找不到关于ruby存储变量的位置的任何确切信息。
答案 0 :(得分:1)
Ruby语言规范不强制或禁止任何特定的存储策略。任何实现都可以随意以任何方式存储任何值。规范只说明运行Ruby程序的结果应该是什么,而不是如何运行程序。 (就像任何其他语言规范一样。)
例如,在SmallRuby中,对象可能在某些情况下存储在磁盘上。而MagLev的整个目的是通过将它们存储在磁盘上的分布式集群中来实现Ruby实现,它可以处理比RAM大几个数量级的堆。
答案 1 :(得分:0)
简短的回答是希望不是。但是很长的答案是,是的,如果机器内存不足,Ruby的变量必须转到磁盘。
然而,要回答你的确切问题:不,Ruby本身从不将变量放入硬盘中(据我所知),但在某些时候操作系统将释放Ruby的内存并将其发送到磁盘。
更有趣的是,您可以在YAML文件(又一种标记语言)中将ruby变量存储在磁盘上,.yml
。因此,如果您尝试使用Ruby将复杂对象存储在数据库中,则可以使用文本列,然后将其合成以实例化为给定类的新对象。
答案 2 :(得分:0)
这个答案指的是标准的MRI / YARV Ruby实现。
与任何其他进程一样,正在运行的Ruby程序的内存由操作系统控制。如果某些其他进程需要更多内存,操作系统将尝试找到它。如果没有空闲RAM,则操作系统可能需要在硬盘驱动器上临时存储或页另一个进程(可能是您的Ruby程序)的RAM。当你的程序再次运行时,它将恢复到RAM。
重要的是要注意这完全由操作系统控制 - Ruby实际上永远不会知道它的内存是否被分页。