我目前正在将一个使用C#(用于Windows Phone)开发的游戏移植到Java(Android)。
我们在Java版本中遇到了内存问题,经过剖析后,发现由于String对象的不可变性质,在内存中有大量的String对象,显然是由计分板方法引起的,每次得分改变时都会调用Integer.toString()方法(每秒多次)。我无法使用StringBuilder(这是C#版本中的工具),因为我们所使用的框架的文本渲染方法只接受String类型的参数,因此仍然会进行转换。
这在Java中是常见的问题吗?除了联系框架开发者修改他们的方法之外,有没有其他解决方案?
更新:
游戏非常快节奏,得分部分基于当前“阶段”开始以来流逝的时间。它每秒更新15次。
我们并未保留对字符串的引用,但我认为可能是框架在泄漏或复制这些字符串,因此我正在研究它(这不是公共框架,据我所知还没有被用于此类快节奏的游戏)。
池化技术是一个好建议,我考虑尝试一下,但必须修改记分系统以拥有固定的值。
我们在Java版本中遇到了内存问题,经过剖析后,发现由于String对象的不可变性质,在内存中有大量的String对象,显然是由计分板方法引起的,每次得分改变时都会调用Integer.toString()方法(每秒多次)。我无法使用StringBuilder(这是C#版本中的工具),因为我们所使用的框架的文本渲染方法只接受String类型的参数,因此仍然会进行转换。
这在Java中是常见的问题吗?除了联系框架开发者修改他们的方法之外,有没有其他解决方案?
更新:
游戏非常快节奏,得分部分基于当前“阶段”开始以来流逝的时间。它每秒更新15次。
我们并未保留对字符串的引用,但我认为可能是框架在泄漏或复制这些字符串,因此我正在研究它(这不是公共框架,据我所知还没有被用于此类快节奏的游戏)。
池化技术是一个好建议,我考虑尝试一下,但必须修改记分系统以拥有固定的值。