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 - - 不知道有没有说错
以前在某帖里紫苏大人提到过这个- -
Window_Base.new(0,0,640,480)
120.times{Graphics.update}
$sprite = Sprite.new
$sprite.z = 999
$sprite.bitmap = Bitmap.new(640,480)
$sprite.bitmap.fill_rect(0,0,640,32,Color.new(0,0,255,255))
$sp = []
$sp[0] = $sprite
$sprite = nil
$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