【问题标题】:Very high "Maximum memory use" for libgdx gamelibgdx 游戏的“最大内存使用量”非常高
【发布时间】:2016-03-01 09:08:45
【问题描述】:

我用libgdx 开发了一款游戏。我尝试通过执行以下操作来尽可能降低内存消耗:

  1. 尽可能使用Pooling
  2. 限制SpriteBatchsize

当我在手机(Nexus 5x)上从Android Studio 运行游戏时,我的游戏运行流畅,似乎内存消耗确实合理:内存消耗通常在 23MB 以下(我通过memory monitor 看到这个)。但是,当我转到手机上的内存选项卡(设置 --> 内存 --> 应用程序使用的内存)时,我看到以下内容:

我的游戏惊人的“最大内存使用量”为 1.2 GB。远超任何其他应用程序。

我的问题:

  • 这个数字是什么意思?这是否意味着我的游戏在某一时刻占用了 1.2 GB 的 RAM?
  • 如果内存监视器从未显示超过 25MB 的消耗量,那又会怎样呢?
  • 看到游戏运行流畅,我应该尝试降低这个数字吗?如果是,我该怎么做?

【问题讨论】:

    标签: android memory libgdx ram


    【解决方案1】:

    您正在混淆本机内存(RAM,如屏幕截图所示)和VM 内存

    在内存监视器中,您只能看到堆(即为运行您的应用的 VM 分配的内存),而不是实际的 RAM。此最大堆大小受系统限制(例如,请参见 https://stackoverflow.com/a/9940415/1096567)。

    Libgdx 通过 JNI 使用 OpenGL,因此也直接使用 RAM。

    要调查您的 RAM 使用情况,您通常需要内存监视器以外的其他工具,例如: How do I discover memory usage of my application in Android?

    我不了解您的应用,但 1.2GB 似乎有点高。如果您不使用Texture Atlases & the Texture Packer,它可能是开始优化的好地方。还要确保处理所有Disposables(如BitmapFont)。 Here is a detailed list.

    【讨论】:

    • 感谢您阐明本机内存和虚拟机内存之间的区别!这确实让我很困惑。我已经在使用 Texture Atlases,而我的游戏图形并不丰富。我有 5 个纹理图集,根据我使用的纹理打包器,总共将占用大约 12MB 的 RAM(全部 5 个)。我要检查的是我是否多次创建一些相同的纹理图集。还有什么我应该检查的吗?
    • @user2016436 我不是 libgdx-pro 但您应该检查是否处理了所有一次性用品:github.com/libgdx/libgdx/wiki/Memory-management。我对您的应用程序也不太了解,无法了解您的内存热点。你需要自己分析它。
    猜你喜欢
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2017-04-08
    • 1970-01-01
    相关资源
    最近更新 更多