[android] “성능이 필요한 곳에 열거하지 마십시오”가 Android의 성능 팁에서 제거 된 이유는 무엇입니까?

공식 개발자 설명서 에서 “Ints 만 필요한 곳에 열거하지 마십시오”절이 제거되었습니다 . ( 이전 섹션 내용에 대해 Android에서 더 많은 열거 형을 사용하지 않는 이유는 무엇입니까? )

왜? 팁이 더 이상 사용되지 않는 Android VM이 변경 되었습니까?



답변

그 문서의 원본 버전은 여러 가지 편견 일뿐입니다. 실제 벤치 마크로 백업 된 사실 만 포함하도록 재 작성되었으며 VM이 업데이트 될 때 업데이트됩니다. http://code.google.com/p/dalvik/ 에서 다양한 벤치 마크와 핵심 라이브러리를 최적화하는 데 사용하는 일부 벤치 마크를 찾을 수 있습니다 .


답변

추측:

  • Hummingbird 및 Snapdragon과 같은 Gigahertz CPU가 이제 일반적이며 Dalvik VM을 원래 제약했던 작은 코드의 작은 메모리 요구 사항은 더 이상 사실이 아닙니다.
  • 모든 운송 장치는 JIT를 사용합니다 (2.2 이상). 열거 형의 클래스 이니셜 라이저가 더 빠르게 실행되고 값이 JIT- 시간 상수로 처리 될 수 있으며 JIT는 열거 형 클래스를 능률화하는 데 특별한 지원을 제공 할 수 있습니다.
  • 실제로 성능에 민감한 코드는 Android 1.5가 출시되었을 때 여전히 새롭고 닦이지 않은 NDK를 사용합니다. 2.3의 NDK는 기본 활동을 지원하므로 거의 관리되지 않는 게임을 할 수 있습니다.

따라서 GUI 응용 프로그램의 비교적 일반적인 요구 사항의 경우 열거 형의 개발 시간 이점이 추가 런타임 비용보다 훨씬 큽니다.


답변

Elliott Hughes는 자신의 블로그 ( http://elliotth.blogspot.com/2010/09/java-benchmarks.html) 에서 문서 재 작성에 대한 자세한 내용을 제공합니다 .

이 포스트의 후반부에서는 퍼포먼스 문서에 대한 모든 클레임이 이제 벤치 마크로 백업된다고 설명합니다. 이전 버전의 문서에는 “너무 비싸서 열거 형을 피하십시오.”와 같이 확인되지 않은 주장이 포함되어있었습니다.


답변

Elliot Hugues의 2011 년 답변에 따르면 열거를 피하는 원래의 이유는 “프로세스 성능”과 같이 성능상의 이유 때문이었습니다. 이 이유는 사실상 뒷받침되지 않았기 때문에 공식 문서에서 제거되었습니다.

열거 형은 정수를 사용하는 것보다 메모리에 더 많은 데이터를 추가하기 때문에 나중에 추가되었습니다.


답변

TLDR : Dalvik은 메모리 할당에 좋지 않았 Enum으며보다 많은 메모리를 사용합니다 int. Android Lollipop은 Dalvik을 ART로 대체했지만 동일한 제한이 없습니다. 따라서이 권장 사항은 더 이상 관련이 없습니다.

긴 대답 :

와! 8 년, 5 답변 및 많은 의견 후에도 실제 이유는 아직 다루지 않았습니다.

롤리팝 이전 안드로이드 시대에는 Dalvik이 사용 된 프로세스 VM이었습니다. 이 기간 동안 응용 프로그램에서 사용할 수있는 메모리 양이 적었 기 때문에 Dalvik은 많은 메모리 제약 조건을 가지고있었습니다. 메모리 할당을 위해 Dalvik은 힙을 걸어 공간을 찾아야했습니다. 힙도 시간이 지남에 따라 조각화됩니다. Dalvik은 조각 모음을 수행 할 수 없으므로 시간이 지남에 따라 할당되어 결국 공간이 부족합니다.

정수만 필요한 열거 형 피하기

이 때문에 달빅 일에서 오는 Enum보다 훨씬 더 큰 int메모리 할당은 매우 비쌌다.

오늘날 Dalvik은 ART로 대체되었습니다. ART는 KitKat에서 출시되었으며 Lollipop 이후 기본값입니다.

ART는 메모리를 최적화하지 않고 성능을 최적화하기 위해 처음부터 만들어졌습니다. 또한 할당 및 수집에 최적화되어 있습니다. 그 이유는 큰 객체를 위해 메모리가 별도로 설정되어 있기 때문입니다. ART는 모든 것을 동일한 힙에 넣은 다음 작은 오브젝트 가운데 큰 오브젝트를위한 공간을 찾아야하는 대신 모든 큰 오브젝트와 비트 맵을 별도의 힙에 넣습니다. 그런 다음 작은 물체는 별도의 힙에 들어갑니다. 또한 조각 모음이 가능합니다.

ART 후에 EnumAndroid 를 사용하는 경우 신경 쓰지 않으므로 권장 사항이 사라졌습니다.

이것은 구글의 Chet Haase에서 온 것입니다. Google I / O 대화를 찾아 전체 동영상을 시청하는 것이 좋습니다. 유용한 정보와 Android에 대한 통찰력이 많이 포함되어 있습니다.


답변

여전히 메모리 성능이 좋지 않습니다.

https://developer.android.com/training/articles/memory.html#Overhead

편집 : 이제 제거되었습니다. 열거 형을 사용하는 것이 안전합니다.


답변