나는 내가 사용하고 엔진의 메소드 (andengine)가 way 매초마다 새로운 String 객체가 생성되고, 1 분 후에 GC 및 추가 AbstractStringBuilders 및 init에 의해 수집 할 59 개의 String 객체가 있습니다 ...문자열 및 쓰레기 수거
andeng의 부분 솔루션을 발견했습니다 이 같은 오프라인 포럼 :
는private static StringBuilder mScoreValue = new StringBuilder("000000");
private static final char[] DIGITS = {'0','1','2','3','4','5','6','7','8','9'};
mScoreValue.setCharAt(0, DIGITS[(PlayerSystem.mScore% 1000000)/100000]);
mScoreValue.setCharAt(1, DIGITS[(PlayerSystem.mScore% 100000)/10000]);
mScoreValue.setCharAt(2, DIGITS[(PlayerSystem.mScore% 10000)/1000]);
mScoreValue.setCharAt(3, DIGITS[(PlayerSystem.mScore% 1000)/100]);
mScoreValue.setCharAt(4, DIGITS[(PlayerSystem.mScore% 100)/10]);
mScoreValue.setCharAt(5, DIGITS[(PlayerSystem.mScore% 10)]);
mScoreText.setText(mScoreValue.toString());
하지만 가장 큰 문제는,로 .toString 남아() 호출 할 때마다
이 문제를 해결하기 위해 어떤 방법이 있나요 새 개체를 반환?
* 초당 하나의 String에 대해 정말로 염려합니까? 모든 클릭이나 다른 이벤트가 새로운 (이벤트) 객체를 생성하기를 기대하기 때문에 그다지 나에게는별로 좋지 않은 것 같습니다. –
예. 보살 피지. 가비지 콜렉터는 충분히 빠르므로 초당 한 번에 할당하는 것에 대한 걱정은 완전히 놀랍도록 비례합니다. 그런 정신없는 사기극은 컴퓨터가 무엇을 가장 잘하는지입니다. 사람들이 그것을하고 더 많은 보람있는 당신의 지력을 사용하게하십시오. –
해당 코드를 사용하면 심각한 조기 최적화의 경우가 될 수 있습니다. 최종적으로 모든 modulo 연산, divisions, 배열에서 가져 오기 및 StringBuilder의 문자 설정은 String 생성 및 관련 가비지 수집보다 처리량이 많을 것이라고 생각합니다. 그리고 다른 사람들이 지적한 것처럼, 결국에는 toString()을 사용하여 String을 생성합니다. 분당 60 개의 작은 오브젝트를 할당하는 것과 같은 한계를 가지고 작업하는 경우 Java는 어쨌든 사용하려는 언어가 아닙니다. C 또는 어셈블리가 거기에있는 마크에 더 가깝습니다. –