我目前在移植的C#(用於Windows手機)開發的遊戲的Java(Android版)的過程。內存問題頻繁Integer.toString()轉換
我們遇到的Java版本內存問題其中,分析後,似乎是從String
對象數量巨大未來在內存中,顯然由於String
的不可變的性質。現在,我已經設法追蹤到將玩家的得分呈現在屏幕上的方法,每次得分改變時(每秒多次)使用Integer.toString()
。我真的不能使用StringBuilder
,因爲我們只使用了框架的文本渲染的方法(這是我們在C#版本)接受String
的作爲參數,因此轉換反正發生。
這是Java中的常見問題嗎?任何人都可以推薦一個解決方案(除了聯繫框架開發人員,讓他們修改他們的方法!)?
更新:
這場比賽是非常快的節奏,比分也是部分基於因爲目前的「階段」的開始經過的時間。它每秒更新15次。
我們不保留對字符串的引用,但我在想,也許框架泄漏或複製這些字符串,所以我試圖調查一下(它不是一個公共框架,並且據我所知它沒有還沒有用於這種快節奏的比賽)。
該池是一個很好的建議,我想嘗試這一點,但在評分系統將不得不爲了有一個固定的值進行修改。
你多久更新屏幕上的分數? – 2013-03-02 17:10:20
你確定Integer.toString()是否是問題?通常沒有性能影響,除非你像100次/秒這樣做。 – 2013-03-02 17:13:16
這個遊戲一次顯示多少個分數。如果內存中有大量的String對象,並且只需要一到兩個,這意味着該應用程序正在泄漏字符串,垃圾收集器無法收集它們。檢查探查器哪些對象引用了字符串,它可能會給你一個線索。 – 2013-03-02 17:18:47