公式の 開発者向けドキュメント から「Intだけが必要な列挙型を避ける」セクションが削除されました。 ( 古いセクションのコンテンツについては、Androidさらに列挙型を使用しますか? を参照しないでください)を参照してください)
どうして? Android VMでチップが廃止されましたか?
Elliot Huguesからの2011年の回答は、enumを避ける最初の理由はパフォーマンスの理由であると述べました...「処理パフォーマンス」のように。この理由は事実に裏付けられていないため、公式文書から削除されました。
列挙型は整数を使用するよりも多くのデータをメモリに追加するため、後で追加されました。
その文書の元のバージョンは偏見の束でした。実際のベンチマークでバックアップされたファクトのみを含むように書き直され、VMが更新されると更新されます。さまざまなベンチマークと、コアを最適化するために使用するベンチマークの一部を見つけることができますライブラリ- http://code.google.com/p/dalvik/ .
推測:
したがって、GUIアプリの比較的ありふれた要件については、列挙の開発時の利点は、追加のランタイムコストをはるかに上回ります。
エリオット・ヒューズは、彼のブログでドキュメントの書き換えに関する詳細を提供しています: http://elliotth.blogspot.com/2010/09/Java-benchmarks.html
投稿の後半では、パフォーマンスドキュメントのすべての主張がベンチマークでバックアップされていることを説明しています。ドキュメントの以前のバージョンには、「列挙型は高すぎるため避けるべき」など、未検証のクレームが含まれていたようです。
メモリのパフォーマンスにはまだ悪いです。
https://developer.Android.com/training/articles/memory.html#Overhead
TLDR: Dalvikはメモリ割り当てに適しておらず、Enum
はint
よりも多くのメモリを使用します。 Android LollipopはDalvikを同じ制限のないARTに置き換えました。したがって、この推奨事項はもはや関係ありません。
長い答え:
うわー! 8年、5つの答えと多くのコメントが後になって、本当の理由はまだ対処されていません。
以前のLollipopでは、Android日、DalvikはプロセスでしたVM使用されました。多くのメモリ制約。メモリ割り当てのために、Dalvikはヒープを移動してスペースを見つける必要がありました。
Intのみが必要な場合は列挙型を避けます
Enum
はint
よりもはるかに大きく、メモリ割り当ては非常に高価だったため、Dalvikの時代から来ています。
今日、早速、DalvikはARTに置き換えられました。 ARTはKitKatで公開され、Lollipop以来のデフォルトです。
ARTは、メモリを最適化するのではなく、パフォーマンスを最適化するためにゼロから作成されました。また、割り当てとコレクション用に最適化されています。その理由は、大きなオブジェクト用にメモリが確保されているためです。すべてを同じヒープに入れてから、すべての小さなオブジェクトの中で大きなオブジェクト用のスペースを見つける必要がある代わりに、ARTはすべての大きなオブジェクトとビットマップを別のヒープに置きます。そして、小さなオブジェクトは別のヒープに入ります。また、最適化することもできます。
ARTの後、Enum
Androidは気にしません。これが推奨事項がなくなった理由です。
これはGoogleのChet Haaseによるものです。彼のGoogle I/Oトークを見つけて、ビデオ全体を視聴することをお勧めします。これには、Androidに関する多くの有用な情報と洞察が含まれています。