j2me内存不足异常

时间:2014-05-20 21:02:37

标签: java-me out-of-memory

我正在使用J2ME制作游戏,有时在测试时我会失去内存异常,我知道这意味着什么,但我该如何解决呢?如果我每次都会在我的游戏循环中调用System.gc(),它会以某种方式提供帮助吗?任何有关如何防止这种情况的提示都将不胜感激!

2 个答案:

答案 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的性能监视器检查实际的选择位置。