web-dev-qa-db-ja.com

Androidのパフォーマンスのヒントから「Intだけが必要な列挙型を避ける」が削除されたのはなぜですか?

公式の 開発者向けドキュメント から「Intだけが必要な列挙型を避ける」セクションが削除されました。 ( 古いセクションのコンテンツについては、Androidさらに列挙型を使用しますか? を参照しないでください)を参照してください)

どうして? Android VMでチップが廃止されましたか?

171

Elliot Huguesからの2011年の回答は、enumを避ける最初の理由はパフォーマンスの理由であると述べました...「処理パフォーマンス」のように。この理由は事実に裏付けられていないため、公式文書から削除されました。

列挙型は整数を使用するよりも多くのデータをメモリに追加するため、後で追加されました。

12

その文書の元のバージョンは偏見の束でした。実際のベンチマークでバックアップされたファクトのみを含むように書き直され、VMが更新されると更新されます。さまざまなベンチマークと、コアを最適化するために使用するベンチマークの一部を見つけることができますライブラリ- http://code.google.com/p/dalvik/ .

157
Elliott Hughes

推測:

  • HummingbirdやSnapdragonなどのギガヘルツCPUは現在一般的であり、Dalvik VMを元々制約していた小さなコードの小さなメモリ要件はもはや真実ではありません。
  • すべての出荷デバイスはJIT(2.2の新機能)を使用します。列挙型のクラス初期化子はより高速に実行され、値はJIT時間定数として扱われる可能性があり、JITは列挙型クラスの合理化を特別にサポートする可能性があります。
  • really performance-sensitiveのコードはNDKを使用しますが、これはAndroid 1.5がリリースされた時点ではまだ新しく、洗練されていません。2.3のNDKはネイティブアクティビティをサポートし、ほぼ完全に管理されていないゲーム。

したがって、GUIアプリの比較的ありふれた要件については、列挙の開発時の利点は、追加のランタイムコストをはるかに上回ります。

26
Josh Lee

エリオット・ヒューズは、彼のブログでドキュメントの書き換えに関する詳細を提供しています: http://elliotth.blogspot.com/2010/09/Java-benchmarks.html

投稿の後半では、パフォーマンスドキュメントのすべての主張がベンチマークでバックアップされていることを説明しています。ドキュメントの以前のバージョンには、「列挙型は高すぎるため避けるべき」など、未検証のクレームが含まれていたようです。

23
jkooker

メモリのパフォーマンスにはまだ悪いです。

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

7
togikan

TLDR: Dalvikはメモリ割り当てに適しておらず、Enumintよりも多くのメモリを使用します。 Android LollipopはDalvikを同じ制限のないARTに置き換えました。したがって、この推奨事項はもはや関係ありません。

長い答え:

うわー! 8年、5つの答えと多くのコメントが後になって、本当の理由はまだ対処されていません。

以前のLollipopでは、Android日、DalvikはプロセスでしたVM使用されました。多くのメモリ制約。メモリ割り当てのために、Dalvikはヒープを移動してスペースを見つける必要がありました。

Intのみが必要な場合は列挙型を避けます

Enumintよりもはるかに大きく、メモリ割り当ては非常に高価だったため、Dalvikの時代から来ています。

今日、早速、DalvikはARTに置き換えられました。 ARTはKitKatで公開され、Lollipop以来のデフォルトです。

ARTは、メモリを最適化するのではなく、パフォーマンスを最適化するためにゼロから作成されました。また、割り当てとコレクション用に最適化されています。その理由は、大きなオブジェクト用にメモリが確保されているためです。すべてを同じヒープに入れてから、すべての小さなオブジェクトの中で大きなオブジェクト用のスペースを見つける必要がある代わりに、ARTはすべての大きなオブジェクトとビットマップを別のヒープに置きます。そして、小さなオブジェクトは別のヒープに入ります。また、最適化することもできます。

ARTの後、Enum Androidは気にしません。これが推奨事項がなくなった理由です。

これはGoogleのChet Haaseによるものです。彼のGoogle I/Oトークを見つけて、ビデオ全体を視聴することをお勧めします。これには、Androidに関する多くの有用な情報と洞察が含まれています。

0
Adeel Ahmad