공식 개발자 설명서 에서 "Ints 만 필요한 곳에 열거하지 마십시오"절이 제거되었습니다 . ( 이전 섹션 내용에 대해 Android에서 더 많은 열거 형을 사용하지 않는 이유는 무엇입니까? )
왜? 팁이 더 이상 사용되지 않는 Android VM이 변경 되었습니까?
공식 개발자 설명서 에서 "Ints 만 필요한 곳에 열거하지 마십시오"절이 제거되었습니다 . ( 이전 섹션 내용에 대해 Android에서 더 많은 열거 형을 사용하지 않는 이유는 무엇입니까? )
왜? 팁이 더 이상 사용되지 않는 Android VM이 변경 되었습니까?
답변:
그 문서의 원본 버전은 여러 가지 편견 일뿐입니다. 실제 벤치 마크로 백업 된 사실 만 포함하도록 재 작성되었으며 VM이 업데이트 될 때 업데이트됩니다. http://code.google.com/p/dalvik/ 에서 다양한 벤치 마크와 핵심 라이브러리를 최적화하는 데 사용하는 일부 벤치 마크를 찾을 수 있습니다 .
추측:
따라서 GUI 응용 프로그램의 비교적 일반적인 요구 사항의 경우 열거 형의 개발 시간 이점이 추가 런타임 비용보다 훨씬 큽니다.
Elliott Hughes는 자신의 블로그 ( http://elliotth.blogspot.com/2010/09/java-benchmarks.html) 에서 문서 재 작성에 대한 자세한 내용을 제공합니다 .
이 포스트의 후반부에서는 퍼포먼스 문서에 대한 모든 클레임이 이제 벤치 마크로 백업된다고 설명합니다. 이전 버전의 문서에는 "너무 비싸서 열거 형을 피하십시오."와 같이 확인되지 않은 주장이 포함되어있었습니다.
Elliot Hugues의 2011 년 답변에 따르면 열거를 피하는 원래의 이유는 "프로세스 성능"과 같이 성능상의 이유 때문이었습니다. 이 이유는 사실상 뒷받침되지 않았기 때문에 공식 문서에서 제거되었습니다.
열거 형은 정수를 사용하는 것보다 메모리에 더 많은 데이터를 추가하기 때문에 나중에 추가되었습니다.
IntDef
주석을 도입 하여 Android Studio 오류 및 경고와 함께 int 상수를 안전하게 사용할 수 있습니다. blog.shamanland.com/2016/02/int-string-enum.html
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 후에 Enum
Android 를 사용하는 경우 신경 쓰지 않으므로 권장 사항이 사라졌습니다.
이것은 구글의 Chet Haase에서 온 것입니다. Google I / O 대화를 찾아 전체 동영상을 시청하는 것이 좋습니다. 유용한 정보와 Android에 대한 통찰력이 많이 포함되어 있습니다.
여전히 메모리 성능이 좋지 않습니다.
https://developer.android.com/training/articles/memory.html#Overhead
편집 : 이제 제거되었습니다. 열거 형을 사용하는 것이 안전합니다.