【问题标题】:Why is RAM-usage of empty libGDX-App climbing steadily?为什么空 libGDX-App 的 RAM 使用率稳步攀升?
【发布时间】:2019-09-21 04:27:03
【问题描述】:

大师们,

我对 libGDX(以及一般的 Java 编程)比较陌生,并且对 libGDX 应用程序的 RAM 使用有疑问,但我无法在线找到答案。 几天前,当我从我目前正在阅读的“使用 LibGDX 的 Java 游戏开发”一书中定制一个游戏示例时,我注意到该游戏的 RAM 使用量在单独放置大约 1 小时时会飙升。我的 Linux 资源监视器从 ~120MB 开始,到我关闭它时达到了 1300MB。我已经就这件事联系了作者,因为我去他的书,一行一行的,仍然有这种行为!

除了他的示例中可能存在的泄漏之外,我决定更深入地挖掘并使用最新的 gdx-setup.jar (v. 1.9.9) 创建一个空的 LibGDX-App,并决定让它运行一段时间。 我使用 Ryzen 2700X、32GB RAM 和 Linux Mint 19.1 在我的工作站上对此进行了测试。 有趣的是,空的应用程序表现出类似但不那么激烈的行为,当我关闭时,RAM 使用率随着时间的推移从约 50MB 持续攀升至约 260MB,甚至没有一次下降! 我在网上看到资源监视器实际上并没有显示 java 进程中正在运行的游戏消耗了什么,而是混合了一些 JVM 的东西。所以我决定在 jConsole 和 VisualVW 的帮助下进一步分析。我怀疑是惰性 GC,但两个工具都显示 GC 定期运行。尽管如此,我的操作系统的资源监视器显示在空的 LibGdx-App 中这种不断攀升的 RAM 使用率,尽管它什么也没做,只是盯着我的脸,红色背景上令人讨厌的 Bad Logic-Smiley ;-)。

我已经在论坛和stackoverflow上对LibGDX的内存泄漏和RAM消耗进行了深入搜索,但找不到令人满意的答案。所以我想知道这种行为是否值得担心,或者这是否正常?如果是这样,即使是空的应用程序的 RAM 使用量也会不断攀升,那么人们怎么能检测到一切是否正常或应用程序是否泄漏内存呢? 如果你们中的一些 LibGDX 专家可以与像我这样的菜鸟分享您在这个主题上的智慧,我将不胜感激:-)

提前谢谢 - 代码艺术家

【问题讨论】:

  • 让我们看看这个空的 libgdx 应用是什么样的
  • 这只是使用 gdx-setup.jar 时创建的默认应用程序。没有添加,没有编辑......

标签: java memory-leaks libgdx garbage-collection


【解决方案1】:

我不是内存管理主题的专家,也不是明智的大师,但我只有一个简单的 libGDX 游戏。 自 25 多年前开始实施我的第一个程序以来,我使用以下策略开发它:始终在低端硬件上进行测试。如果一切顺利,那么一切都很好。我的 libGDX 游戏从 2011 年开始在低端 Android 设备上运行良好,iOS 版本在 2013 年开始在 iPhone 上运行良好。在今天的中端移动设备上,Android 版本几乎从未被杀死以节省内存。虽然我每天玩我的游戏大约 10 次并且它为此进入前台,但该过程显然没有足够的内存让 Android 决定关闭它。 Play 商店的评论家称赞该游戏在低端设备上运行流畅。

所以我给你的答案是:libGDX 没有问题,也许你只是观察系统上的一些 JVM 行为。编写您的游戏,在低端设备上进行测试 - 使用旧的 Galaxy S3 或 Moto G,或者如果您打算发布桌面版,请使用旧的 2011 商务笔记本电脑进行测试。如果一切正常,请不要尝试追踪或修复不存在的问题。

顺便说一句,欢迎您加入 Github 页面上链接的 libGDX discord。那是进行此类讨论的合适场所,而且我们有一些人在那里闲逛,他们之前确实检查过记忆行为。

【讨论】:

  • 感谢您的建议。这听起来确实很合理。虽然,我不得不承认,我觉得不明白为什么空的 LibGDX 项目的 JVM 进程继续占用这么多内存有点令人沮丧。特别是因为根据 VisualVM 确实发生了 Full GC!无论如何,感谢 Discord 的提示。我一定会在那里碰碰运气:-)
猜你喜欢
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 2015-01-03
  • 2023-03-05
  • 2016-02-22
  • 1970-01-01
相关资源
最近更新 更多