为什么空的libGDX-App的RAM使用率稳定增长?

时间:2019-05-02 15:46:16

标签: java memory-leaks libgdx garbage-collection

那里的大师

相对来说,我是libGDX(和Java编程)的新手,并且对libGDX应用程序的RAM使用存在疑问,我无法在线找到答案。 几天前,当我从我目前读过的《用LibGDX进行Java游戏开发》一书中定制一个游戏示例时,我注意到该游戏的RAM使用率在单独放置约1小时时会激增。我的Linux资源监控器开始时有〜120MB的内存,到我关闭它时又增加到了1300MB。自从我逐行浏览他的书以来,我仍然已经就此事与作者联系了。

除了他的示例中可能存在的泄漏外,我还决定进行更深入的研究,并使用最新的gdx-setup.jar(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专家能够与像我这样的菜鸟分享您在这一主题上的智慧,我将不胜感激:-)

提前 -codeArist

1 个答案:

答案 0 :(得分:0)

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

因此,对您来说,我的答案是:libGDX没问题,也许您只是在系统上观看了一些JVM行为。编写您的游戏,在低端设备上进行测试-使用旧的Galaxy S3或Moto G,或者如果您打算发布用于台式机,请使用旧的2011商用笔记本电脑进行测试。如果一切正常,请不要尝试查找或解决不存在的问题。

顺便说一句,欢迎您加入Github页面上链接的libGDX不和谐。在这里进行讨论是正确的地方,我们之前有一些人在那里真正地检查过记忆行为。