【问题标题】:Using Bitmap.createBitmap causes GC_CONCURRENT messages使用 Bitmap.createBitmap 会导致 GC_CONCURRENT 消息
【发布时间】:2013-05-16 12:28:14
【问题描述】:

我正在编写一个马里奥风格的游戏,在表面视图上绘制了一组瓷砖。我创建了一个 Tile() 类,它包含一个公共位图和一个在有动画平铺时返回单帧的方法。此类用于公共静态数组。

在增加平铺位图的数量(目前为 25 个)的同时,我在 eclipse 中收到越来越多的此类消息:

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

它开始变得相当滞后。难道我做错了什么?我想将位图保留在内存中,因为它们经常被使用。

[编辑:] 我发现这条线

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

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

【问题讨论】:

标签: java android eclipse


【解决方案1】:

为了让你的图片保持活力,你需要把它们放在你班级的顶部,比如:

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 工作的信息

【讨论】:

  • 谢谢,我想我已经这样做了。我只是发现不是存储的图像导致了错误。从动画中返回单个位图的方法可以做到这一点。我试图将所有位图放在类的顶部或使它们成为静态,但它似乎没有帮助:/
【解决方案2】:

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

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

[编辑] 起初看不到您在 Android 上:-/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-13
    • 2021-10-18
    • 2013-11-13
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多