垃圾收集在红宝石中?

史蒂夫

我可以看到以前问过的相关问题

在某些语言中,有一种强制垃圾收集的特定方法。例如,在R中,我们可以调用gc(),它将释放以前用于存储自删除对象以来的内存。

有没有办法在红宝石中做到这一点?

如果相关的话,我会运行一个很长的循环,并且我认为它会在每次迭代中慢慢积累一点内存,并且我想每执行100次迭代就强制进行一次垃圾回收,以确保例如(伪代码)if index % 100 == 0 then gc()还要注意,我打算在Rails应用程序中使用它,尽管我认为这无关紧要(因为垃圾回收将完全是红宝石功能,与Rails无关)

约格午间

不,在Ruby中无法做到这一点。

这里一个名为方法GC::start,并且该文档甚至说:

启动垃圾收集,即使手动禁用也是如此。

但这不是事实。GC::start是一个简单的咨询,从你的代码运行时,它会是安全的您的应用程序现在运行的垃圾收集。但这只是一个建议。运行时可以随意忽略此建议。

具有自动内存管理功能的大多数编程语言都无法使程序员控制垃圾回收器。

如果Ruby有强制垃圾收集的方法,那么就不可能在JVM上实现Ruby,并且JRuby和TruffleRuby都不可能存在,在.NET上实现Ruby以及Iron Iron都不可能存在,那就是无法在ECMAScript上实现Ruby,而Opal则不存在,无法使用现有的高性能垃圾收集器来实现Ruby,并且RubyOMR也将不存在。

由于通常希望赋予实施者自由度以实现优化并使其语言更快,因此语言在指定功能时会非常谨慎,这些功能会极大地限制实施者可以执行的操作。

我很惊讶R具有这样的功能,特别是因为这意味着不可能以符合语言规范的方式来实现FastR之类的高性能实现FastR比GNU R快35倍以上,因此很明显为什么需要像FastR这样的东西。但是FastR更快的方法之一是,它使用不允许控制垃圾收集的第三方高性能垃圾收集运行时(GraalVM或JVM),因此FastR永远不能成为兼容的R实现。 。

有趣的是,的文档中gc()这样说:

调用的主要目的gc是为了报告内存使用情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从红宝石中实时创建的新线程异步收集结果

来自分类Dev

红宝石组收集通过foreach中的第一个字母

来自分类Dev

解决方案中收集红宝石修改原始数据?

来自分类Dev

正则表达式用于在字符串红宝石中收集字母

来自分类Dev

红宝石中的<<-是什么?

来自分类Dev

反射在红宝石中?

来自分类Dev

用红宝石中的\\替换`\`

来自分类Dev

红宝石中的数组更新

来自分类Dev

排序红宝石中的数字

来自分类Dev

红宝石中的内存分配

来自分类Dev

红宝石中的Trim()方法?

来自分类Dev

在红宝石数组中搜索

来自分类Dev

红宝石中的数组更新

来自分类Dev

澄清红宝石中的常数

来自分类Dev

红宝石中的文件索引

来自分类Dev

在红宝石中跳过日期

来自分类Dev

红宝石中的Haversine公式

来自分类Dev

在红宝石中尝试方法

来自分类Dev

如何以红宝石哈希递归收集深层嵌套的密钥

来自分类Dev

开槽系统中的垃圾收集

来自分类Dev

红宝石和铁轨中的资源路线

来自分类常见问题

%i或%I在红宝石中做什么?

来自分类Dev

在红宝石数组中查找行

来自分类Dev

红宝石中的嵌套作业

来自分类Dev

红宝石中的数组x数组矩阵

来自分类Dev

删除红宝石中奇怪的无效字符

来自分类Dev

红宝石中的类后代语法

来自分类Dev

在HAML中遍历哈希的红宝石数组

来自分类Dev

红宝石中的整数变量声明