我目前正在将用 C#(用于 Windows Phone)开发的游戏移植到 Java(Android)。
我们在 Java 版本中遇到了内存问题,在分析之后,这似乎来自String
内存中的大量对象,这显然是由于String
's. 现在,我已经设法将其追溯到将玩家的分数呈现到屏幕上的方法,Integer.toString()
每次分数变化时都会使用 a (每秒多次)。我不能真正使用 a StringBuilder
(这是我们在 C# 版本中所拥有的),因为我们使用的框架的文本渲染方法只接受String
's 作为参数,因此无论如何都会发生转换。
这是Java中的常见问题吗?任何人都可以推荐一个解决方案(除了联系框架开发人员要求他们修改他们的方法!)?
更新:
游戏节奏非常快,分数部分基于从当前“阶段”开始所经过的时间。它每秒更新 15 次。
我们没有保留对字符串的引用,但我在想可能是框架泄漏或复制了这些字符串,所以我试图调查一下(它不是一个公共框架,据我所知它没有被使用过对于这种快节奏的游戏呢)。
池化是一个很好的建议,我想尝试一下,但是必须修改评分系统才能获得一组固定的值。