Project1

标题: 关于GC [打印本页]

作者: 赤点    时间: 2009-8-15 00:31
标题: 关于GC
本帖最后由 赤点 于 2009-8-15 21:31 编辑

垃圾回收拿来干嘛的
谁能讲解一下,谢了
GC
GC 是用来控制 Ruby 解释器的「垃圾回收(Garbage Collection)」的模块。

模块方法GC.disable
禁止使用垃圾回收。

返回此前的禁用状态(若此前已被禁用,则返回 true,若此前 GC 仍在工作,则返回 false)。

GC.enable
允许使用垃圾回收。

返回此前的禁用状态(若此前已被禁用,则返回 true,若此前 GC 仍在工作,则返回 false)。

GC.start
启动垃圾回收。

返回 nil。
作者: 赤点    时间: 2009-8-15 09:12
顶&
作者: 神思    时间: 2009-8-15 09:51
自动释放不再使用的对象。
作者: 我不宅    时间: 2009-8-15 09:59
很好~~~咱看不懂~~~~~
作者: 黑鏻    时间: 2009-8-15 10:31
垃圾回收机制:当需要分配的内存空间不再使用的时候,调用垃圾回收机制来回收内存空间。
作者: WildDagger    时间: 2009-8-15 12:03
這個對加快遊戲速度有幫助嗎?

GC看來好像是把沒用的東西先丟掉

不曉得這樣會不會加快遊戲速度。
作者: 赤点    时间: 2009-8-15 12:07
只是节约内存用,能加快一点点吧
作者: 后知后觉    时间: 2009-8-15 14:48
本帖最后由 后知后觉 于 2009-8-15 15:34 编辑

当一些东西失去了引用名(应该是这么叫吧- -)后就会被GC回收

你去 Cache 这个模块下看看最后的定义

    def self.clear
      @cache = {}
      GC.start
    end
@cache这个哈希表本来装了很多很多Bitmap对象
但是现在把这个哈希表清空了
这些Bitmap对象失去了引用的地方但是又占据着内存
然后就 GC.start - -  不知道有没有说错
以前在某帖里紫苏大人提到过这个- -
  1. Window_Base.new(0,0,640,480)
  2. 120.times{Graphics.update}
  3. $sprite = Sprite.new
  4. $sprite.z = 999
  5. $sprite.bitmap = Bitmap.new(640,480)
  6. $sprite.bitmap.fill_rect(0,0,640,32,Color.new(0,0,255,255))
  7. $sp = []
  8. $sp[0] = $sprite
  9. $sprite = nil
  10. $sp.clear
复制代码
有些东西弄不明白会觉得很诡异 - -
如果把 120.times{Graphics.update}
放到最后来执行的话 Window对象就不会被回收- -
作者: IamI    时间: 2009-8-15 17:02
本帖最后由 IamI 于 2009-8-15 17:04 编辑

8# 后知后觉
感觉有GC的应该是基于句柄……引用在GC的作用下应该也会崩溃吧 - -
事实上,GC默认开启,如果脚本编辑合适,GC只会吃闲饭。

在一个Scene上画一个Window,但是不dispose之,在回到地图时仍然可以看见这个窗口。不切换屏幕,在约1分钟以后Window仍然会消失。这就是GC的作用。
作者: 赤点    时间: 2009-8-15 18:36
Ruby有引用?
作者: 紫苏    时间: 2009-8-15 20:41
new 建立对象时会在堆内存中分配新的空间存储对象,之后在不需要这个对象的时候就应该释放内存,否则内存一直保持占用,就会发生内存泄漏~内存泄漏会根据其严重性导致各种不同等级的问题,轻则降低程序的性能,重则导致系统或设备停止运转~
高级语言中的垃圾回收机制则是方便了程序员的懒人机制,它使得程序员不需要去考虑释放内存的问题,只需要让对象失去引用,垃圾回收器就会在适当的时候自动释放内存~而在 C 中一旦使用了 malloc 分配内存,最后总是要用 free 去释放,相比之下有垃圾回收机制的语言使用起来自然感觉方便多了
Ruby有引用?
赤点 发表于 2009-8-15 18:36

Ruby 中所有变量其实都叫引用




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1