gpt4 book ai didi

java - 频繁 Integer.toString() 转换的内存问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:05 26 4
gpt4 key购买 nike

我目前正在将一款用 C#(适用于 Windows Phone)开发的游戏移植到 Java (Android)。

我们在 Java 版本中遇到了内存问题,在分析之后,似乎是由于内存中的大量 String 对象造成的,这显然是由于 String 的不可变特性 的。现在,我设法将其追溯到将玩家分数呈现到屏幕上的方法,每次分数变化时(每秒多次)都会使用 Integer.toString()。我不能真正使用 StringBuilder(这是我们在 C# 版本中拥有的),因为我们使用的框架的文本呈现方法只接受 String作为参数,因此无论如何都会发生转换。

这是 Java 中的常见问题吗?谁能推荐一个解决方案(除了联系框架开发人员要求他们修改他们的方法!)?

更新:

游戏节奏非常快,分数部分基于当前“阶段”开始后耗时。它每秒更新 15 次。

我们没有保留对字符串的引用,但我认为框架可能正在泄漏或复制这些字符串,所以我正在尝试调查(它不是公共(public)框架,据我所知它没有'还没有用于这种快节奏的游戏)。

池化是一个很好的建议,我想尝试一下,但必须修改评分系统才能获得一组固定的值。

最佳答案

我不确定它是否对你的特定情况有帮助,但一般来说,当你有一些固定的字符串值集你正在操作时,添加所有这些值是有意义的串池。在这种情况下,您可以强制 JVM 不在堆上为每个新字符串创建对象,而是利用字符串池。

您必须更改代码以从池中返回字符串,例如:

return String.valueOf(123).intern();

来自 javadoc 的一些额外解释:

When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.

关于java - 频繁 Integer.toString() 转换的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15177087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com