首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby中的内存模型

Ruby中的内存模型
EN

Stack Overflow用户
提问于 2016-07-04 11:52:39
回答 1查看 1.1K关注 0票数 6

如何在红宝石中管理内存。对于Ex:如果我们在执行过程中使用C程序,下面是内存模型。与此类似,内存是如何在红宝石中处理的。

代码语言:javascript
复制
  C:
                       __________________
                        |                |
                        |      stack     |
                        |                |
                        ------------------
                        |                |
                        |   <Un Allocated|
                        |       space>   |
                        ------------------
                        |                |
                        |                |
                        |       Heap     |
                        |                |
                        |                |
                        __________________
                        |                |
                        |       data     |
                        __________________
                        |       text     |
                        __________________

Ruby: 

              ?
EN

回答 1

Stack Overflow用户

发布于 2016-07-04 12:34:35

在Ruby中没有“内存”这样的东西。

Class#allocate分配一个对象并返回该对象。这就是程序员与对象空间子系统之间的全部交互程度。

在分配对象的地方,如何分配对象,如果它停留在内存中的同一个位置,或者在内存中移动,那么所有这些都不会被指定或观察到。例如,在MagLev上,对象实际上可能根本不在内存中分配,而是在磁盘上分配,或者在另一台计算机的内存中分配。JRuby,IronRuby,Opal,红衣主教,MacRuby等等,把他们的内存管理“外包”给第三方,他们甚至不知道他们的记忆发生了什么。

Ruby实现可以使用单独的堆栈和堆,也可以使用堆分配的堆栈,甚至可以根本不使用堆栈(例如红衣主教)。

注意:ObjectSpace模块允许对对象空间进行有限的内省和反射。一般来说,当我在Ruby中说某事是“不可能的”时,总是有一个隐含的警告“除非你使用反射”。但是,即使是ObjectSpace也不会泄漏任何有关内存组织的信息。

在YARV中,还有objspace库和GC模块,它们提供了有关YARV的内部实现细节。但是,它们是YARV的私有内部实现细节,它们甚至不能保证在其他实现中存在,即使在YARV中,它们也可以在没有通知的情况下随时更改。

您可能会注意到,我没有写任何关于垃圾收集的文章!实际上,Ruby只指定什么时候引用对象,什么时候没有引用对象,它没有说明如何处理未引用对象。实现回收那些未引用对象所使用的空间是有意义的,而且所有这些对象都在一定程度上这样做(例如,较早版本的YARV不会回收未引用的Symbols),但它并不是必需的,也不是指定的。所有的实现都使用非常不同的方法。同样,JRuby、IronRuby、Opal、红衣主教、MacRuby、Topaz、MagLev等将这个问题“外包”给底层平台,Rubinius使用了基于Immix收集器的分代复制、移动、跟踪收集器,YARV使用了一个简单的标记和扫描跟踪收集器。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38184093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档