Android 게임 개발에서 컬렉션 사용을 권장하지 않습니까?


10

안드로이드 게임 프로젝트에서 작업하는 동안 게임 코드의 성능 최적화에 대한 정보를 찾기 위해 파고 들었습니다 . 그리고 List, Arraylist 등과 같은 Java Collections의 사용은 게임 코드에서 권장되지 않지만 Collection은 Java 프로그래밍에서 유용한 도구이지만 왜 그런가? Collection 프레임 워크가 Android 시스템에 미치는 영향과 그 이유에 대한 기술적 세부 정보를 알고 싶습니다. 이와 관련하여 도움이 될 것입니다.


어디서 읽었습니까?
egarcia

아마도 여기에 있습니다 : developer.android.com/guide/practices/design/performance.html 참고 사항 : 요약 : 기본적으로 Enhanced for 루프를 사용하지만 성능이 중요한 ArrayList 반복을 위해 수작업으로 카운트 된 루프를 고려하십시오.
일러

답변:


8

주로 메모리 할당 및 가비지 수집에 관한 것입니다. 런타임 동안 메모리 할당은 가비지 수집기에서 휴지통을 가져올 수있는 기회를 제공합니다. 성능이 저하됩니다. GC는 가능한 한 드물게 발생해야합니다.

대부분의 자바 컬렉션 :

A) 필요한 것보다 많은 메모리를 할당하십시오.

B) 원하지 않는 메모리를 할당하십시오.

C) 컬렉션을 반복 할 때 각 반복기에 대한 메모리를 할당하십시오.

이러한 것들을 피하려면 :

A) 고정 된 크기의 컬렉션을 할당하십시오. 즉. 객체 풀을 만듭니다.

B) 프로그램 풀에서이 풀을 할당하십시오.

C) size () 및 .get (int index) 메소드가있는 콜렉션 유형의 경우 for (Object obj : collection)를 피하십시오.


2
모든 유효한 점을 명심하십시오. "우리는 시간의 약 97 %라는 작은 효율성을 잊어야합니다. 조기 최적화는 모든 악의 근원입니다." 그러한 최적화는 실제로 필요한 지점으로 제한해야합니다. 다른 모든 곳에서는 명확하고 단순한 디자인을 위해 노력합니다.
Michael Klement

@Michael : 빠른 캐시와 느린 메모리 및 다중 코어를 갖춘 오늘날의 시스템에서 메모리 할당은 가장 비싼 작업입니다.

2
@Michael : 메모리 할당 패턴을 최적화 할 수있을만큼 성능이 뛰어난 고성능 상용 게임 엔진을 찾기가 어려울 것입니다. 실시간 안드로이드 게임의 주제에 대한 긴 이야기가 있습니다. 조금 낡았지만 대부분 적용해야합니다. youtube.com/watch?v=U4Bk5rmIpic
Nailer

물론, 틀리지 말아라 : 나는 당신의 대답에 동의하고 싶지 않았습니다. 나는 단지 당신이 신중하고 올바른 지점에서 최적화해야한다고 지적하고 싶었습니다. 성능에 최소한의 영향을 미치는 지점 (예 : 1 %)에서 컬렉션에 비해 배열을 사용하면 이점이 없습니다. (여기에서 더 자세히 논의 : developer.android.com/guide/practices/design/… )
Michael Klement

3
@AttackingHobo : 동의하지 않습니다. 맹목적으로 최적화하는 것은 유익하지 않습니다. 이것이 당신의 진술이 나에게 들리는 것입니다 (잘못되면 정정하십시오). Chris Pruett는 또한 위에 링크 된 Google IO 비디오에서 다음과 같이 말했습니다 : "매주 매일 속도에 대한 유연성을 선택하십시오 ... 게임 플레이가 손상 될 때까지" 나는 이것에 동의합니다.
Michael Klement
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.