我正在使用J2ME制作游戏,有时在测试时我会失去内存异常,我知道这意味着什么,但我该如何解决呢?如果我每次都会在我的游戏循环中调用System.gc(),它会以某种方式提供帮助吗?任何有关如何防止这种情况的提示都将不胜感激!
答案 0 :(得分:0)
我看到你也问了j2me wtk find memory leak
根据我的经验,内存泄漏不会导致OutOfMemoryExceptions
。他们所做的只是慢慢耗尽设备中的所有内存。当它几乎耗尽时,设备就会被迫拨打System.gc()
。
System.gc()
是一个阻止调用,这意味着它会让你的整个游戏停顿几微秒,这当然很烦人。这就是人们寻找内存泄漏的原因 - 阻止自动调用System.gc()
。
如果发生{{}},则可能会发生OutOfMemoryException
在尝试加载2mb资源时,你还剩1mb内存。虽然内存泄漏可能会大大增加遇到类似情况的机会,但问题不在于内存泄漏本身,而在于您更有可能使用过大的资源。
你是否正在使用mp3文件播放音乐?或者背景或地图的大图片?
您可以在加载大型资源之前尝试调用System.gc()
,这样可以减少问题。但问题并不仅仅与你的游戏有关。同时在设备上运行的其他应用程序以及它们使用的内存量也很重要。
您也可以尝试用MIDI音乐替换mp3音乐,只是为了测试它是否有所作为。 (在IndieGameMusic.com上查找JavaME优化的MIDI音乐)。
如果你使用大图像,请确保使用PNGout或Optipng等工具对其进行优化。
答案 1 :(得分:0)
如果原始文件不是太大而不需要减小大小,则可以使用jpeg代替...也可以对本地缓冲区大小进行特定限制。在system.gc()之前,您可以使用Thread.sleep()用于测试目的,以检查效果并给Gc留出时间。也可以使用WTK的性能监视器检查实际的选择位置。