使用Bitmap.createBitmap会导致GC_CONCURRENT消息

时间:2013-05-16 12:28:14

标签: java android eclipse

我正在写一个马里奥风格的游戏,在表面视图上绘制一组瓷砖。我创建了一个Tile()类,它包含一个公共Bitmap和一个方法,如果有一个动画磁贴,则返回一个帧。该类用于公共静态数组。

在增加tile位图的数量(目前为25)时,我在eclipse中获得了越来越多的这些消息:

D / dalvikvm(1819):GC_CONCURRENT释放414K,43%免费3181K / 5568K,暂停73ms + 92ms,总计224ms

开始变得非常迟钝。难道我做错了什么?我希望将位图保留在内存中,因为它们经常被使用。

[编辑:] 我想出了那条线

returnBitmap = Bitmap.createBitmap(bmpRight, pixelPos, 0, spriteBmpWidth, spriteBmpHeight);

导致这个。有没有办法避免它? :/

2 个答案:

答案 0 :(得分:0)

增加JVM的堆大小,对于Java游戏来说,5M可能非常小,如果你将BitMaps保留在内存中,那么就可以了。 使用-Xmx100m运行Java程序以将heapSize增加到100M

您看到的消息来自JVM垃圾收集器释放内存时的调试日志。

[编辑]一开始并没有看到你在Android上: - /

答案 1 :(得分:0)

为了让您的图像保持活力,您需要将它们放在课堂上,例如:

public class A{
   Bitmap a;
   Bitmap b;
   public void ...
}
当你的A级使用时,

并且GC不会触碰它们。 如果您将在方法中创建位图 - 它们将在方法运行时保持活动状态。像这样:

public void test()
{
   Bitmap a;
   Bitmap b;
} // on this moment GC will delete images from memory

您可以在this link

上阅读有关GC工作的更多信息