2017-01-20 4 views
-1

私はアンドロイドの世界では新しいです。私はいくつかの静的フィールドといくつかの最終的な静的フィールドを使用する必要があるアンドロイドアプリケーションを開発しています。それはapplication.iのパフォーマンスに懸念は、このトピックに関する検索を行ってきたようにpermormanceに静的変数または最終静的varibaleを使用することの効果

1.whatは、静的または、最終的な静的フィールドを処理中のメモリとパフォーマンスへの影響

2.Howガベージコレクションの仕事になります。

  1. ガベージコレクションに使用できるフィールド。

答えて

1

1)変数が静的である場合のペナルティペナルティはありません。非静的変数と同じ量のメモリが必要です。

2/3)静的フィールドの変数は、クラス自体がメモリから追い出されない限り、ガベージコレクトできません。実際には、決して起こらないでしょう。収集されるためには、変数を別の値(uncollectableにする)またはnullに上書きする必要があります。

スタティック最終フィールドは定数です。上書きすることはできないので、決して収集されません。

+0

すべての静的最終変数が定数であるわけではありません。それらは、JLSごとに、定数であるために定数式で初期化する必要があります。つまり、それらはプリミティブまたは 'String'でなければなりません。それらはリテラルとしてコードにコンパイルされます。定数ではない静的final finalをすべて定数として扱うことはできません。彼らは変更可能性があります。非静的変数は、メンバであってもローカルであっても定数である可能性があります。不変オブジェクトの定数と 'final'変数だけが定数として扱われなければなりません。すべての名前をアンダースコアで大文字にします。 –

+0

可変であるということは、それらが定数ではないことを意味するわけではありません。REFERENCESは定数です。もちろん、クラスが許可している場合は、参照するデータを変更することができます。全く異なるコンセプト。ちょうどC++のconstポインタのように、typenameのconst * const –

+0

@LewBlochを除いて、データが変更されたままにすることができます。これは私はすべての静的なfinalフィールドを保持し、定数式で初期化する別のクラスを作っていましたpublic static final String CUSTOMER_EDIT_USER_ID = "CUSTOMER_EDIT_USER_ID"; 。私の質問は、それがメモリー内でどのように影響し、アプリケーションのパフォーマンスに対応し、ガーベジコレクションのために静的な最終フィールドまたは静的フィールドが利用可能な場合です。 –

関連する問題