设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1992|回复: 8
打印 上一主题 下一主题

垃圾回收模块GC的问题^^

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2007-8-30
帖子
101
跳转到指定楼层
1
发表于 2008-1-10 04:17:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
gc清理内存是只局限在对象内部,只对一个对象起作用?
还是用了gc.start后会清理掉所有废弃的.{/pz}

还有gc清理的范围?都会把什么样的目标清除掉.{/hx}
版务信息:本贴由楼主自主结贴~

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2007-8-30
帖子
101
2
 楼主| 发表于 2008-1-10 04:17:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
gc清理内存是只局限在对象内部,只对一个对象起作用?
还是用了gc.start后会清理掉所有废弃的.{/pz}

还有gc清理的范围?都会把什么样的目标清除掉.{/hx}
版务信息:本贴由楼主自主结贴~

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

3
发表于 2008-1-10 05:23:49 | 只看该作者
清理掉所有废弃的,

一个对象不再被使用,就会被清除掉。
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2007-8-30
帖子
101
4
 楼主| 发表于 2008-1-11 03:58:32 | 只看该作者
{/hx}谢谢美兽殿,
清理所有.看来这个不能经常用了,常用肯定巨卡.^^
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

5
发表于 2008-1-11 08:31:34 | 只看该作者
回收模块默认就是开启的,所以有cache的存在。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2007-8-30
帖子
101
6
 楼主| 发表于 2008-1-12 03:46:15 | 只看该作者
默认开启{/gg},就是说这个类似个开关喽
    def self.clear
      @cache = {}
      GC.start
    end
默认开启这个方法为什么还要特意加个GC.start
那重复调用RPG::Cache.clear会不会出现什么问题啊?
GC.enable和GC.disable又有什么用。
我先用GC.disable后用GC.start,居然没有跳出任何异常提示{/gg},这是为什么?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

7
发表于 2008-1-12 10:22:09 | 只看该作者
以下引用冰水于2008-1-11 19:46:15的发言:

默认开启,就是说这个类似个开关喽
   def self.clear
     @cache = {}
     GC.start
   end
默认开启这个方法为什么还要特意加个GC.start
那重复调用RPG::Cache.clear会不会出现什么问题啊?
GC.enable和GC.disable又有什么用。
我先用GC.disable后用GC.start,居然没有跳出任何异常提示,这是为什么?


首先,Cache是个模块,是静态处理,所以@cache会直接占用内存,当bitmap对象装入之后也会保留,RPG::Cache得到的是对象引用,当@cache = {}清空后,虽然@cache没有数据,对象占用的内存空间并没有被释放,此时GC会定时对不被使用的对象进行检查,并自动释放,GC.start是确保垃圾处理的有效,因为GC可以关闭的。

RPG::Cache.clear释放缓存,会影响相同的bitmap的载入速度,毕竟调引用比重新载入要快的多。

至于GC.enable和GC.disable与GC.start的逻辑关系看F1很好理解吧……
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2007-8-30
帖子
101
8
 楼主| 发表于 2008-1-13 17:51:42 | 只看该作者
{/gg}
就是说GC.start只是在确保垃圾处理的有效喽,GC会定时清理内存
GC.disable后可以重新用GC.start清理下内存,

orz,但GC还是默认开启的,谁没事会把GC关掉?RGSS里很多脚本还真是诡异啊。{/fd}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

9
发表于 2008-1-13 22:46:57 | 只看该作者
以下引用冰水于2008-1-13 9:51:42的发言:


就是说GC.start只是在确保垃圾处理的有效喽,GC会定时清理内存
GC.disable后可以重新用GC.start清理下内存,

orz,但GC还是默认开启的,谁没事会把GC关掉?RGSS里很多脚本还真是诡异啊。


因为垃圾处理消耗资源,如果你能绝对控制对象的内存使用,还是不启用的好。

同时GC存在不确定性,无法确定频率和作用对象,只是以标记形式加入队列等待下次GC才去处理。

只是这些东西对于运算量非常小的RGSS来说没什么大的意义。
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-7-27 19:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表