2013-08-09 10 views
25

は、未使用のインポートとても好きです - インポートandroid.widget.RelativeLayout。メモリを食べる? どれだけ価値があるか、それとも価値があるのか​​を知りたいだけですか? これは愚かな質問かもしれませんが、答えが見つかりませんでした。未使用のインポート宣言はJavaでメモリを消費しますか?

+0

の可能性のある重複した[未使用のインポートおよびオブジェクトは、パフォーマンスへの影響を持っています](http://stackoverflow.com/questions/8724045/does-unused-import-and -objects-have-an-performance-impact) – jonayreyes

答えて

45

ありません、彼らは任意のメモリを取ることはありません。インポートは、コンパイル時にクラス名を解決するためにコンパイラによって使用されます。

コンパイラは、完全修飾名に各クラス名を変更します。 importステートメントを削除します。したがって、importステートメントはバイトコードにしません。

ワイルドカードのインポートで発生する唯一の問題は、名前空間の競合です。つまり、2つの異なるパッケージに同じ名前の2つの型が定義されている場合、それらのパッケージをワイルドカードでインポートすると、


コンパイラがimport文を置き換える方法を確認するには、javapコマンドを使用して、クラスのバイトコードを生成することができます。ただ、上記のコードをコンパイルして、次のコマンドを使用して、バイトコードをチェック

import java.util.*; 
import java.util.regex.*; 

public class Test { 
    public static void main(String[] args) { 

    } 
} 

javap Test 

それは次のような出力配る:だから

public class Test { 
    public Test(); 
    public static void main(java.lang.String[]); 
} 

を、以下のコードを考えてみましょうString型が完全修飾名java.lang.Stringに置き換えられ、バイトコードでインポート文がないことがわかります。

+0

ありがとうございました! –

+0

この回答は私には意味がありますが、私はJavaプロジェクトでこれと矛盾しているような問題がありました。私はクラスをコンパイルし、いくつかのインポートとその参照を難読化して他の難読化されたコードで動作させるプログラムを実行し、そのクラスを逆コンパイルして、今は難解な古いクラスのインポートステートメントを見てみましょう。これらのクラスがコード内で使用されなくなった場合、どのようにデコンパイラがこれらのインポート文を取得しますか?彼らは編集で失われてはいけませんか? (私はこれを新しい質問として投稿するべきですか?) – Variadicism

+0

気にしないでください。忘れてください。私はreobfuscatorがちょうど半分仕事をしていると信じています。私は、それが輸入声明がまだそこにある理由だと考えています。逆コンパイラは、おそらくそれらをより良く見えるようにするために、それらのimport文を記述しています。 – Variadicism

1

未使用のインポートは、実行時に影響を与えません(バイトコードにインポートがないため)。ただし、未使用のインポートはコンパイラには影響しますが、あまり多くは影響しません。

一般に、必要なものだけをインポートすると、コードの保守性と可読性が向上します。

11

コンパイラは、コンパイル後にコンパイラを削除しません。あなたはjarファイルからいくつかのクラスをインポートして、後からの輸入をjarファイルを削除したが、そうでない場合でも、二人は問題あなたが

  1. コードをすっきり
  2. に直面する可能性があり、あなたは
2

に、実行時には影響を与え時エラーをコンパイルしないことがあります。これはコンパイルプロセスを非常に小さなビット(測定不可能)にします。しかし、ファイルを作成する限り、ファイルを小さくし、インポートが実際に使用されていることを読みやすくするため、ファイルを削除する方が良いです。

+0

+1は、自己文書化の側面です。これは、使用されているクラスだけを明示的にインポートする主な理由です。 –

0

影響なし何らかのrumtimeコンパイラ時間

が、最善のアプローチは、これは、コードの保守性を向上させ、それが合理的にそれがある後でさえも行い確保することができますようすることができます最も明確かつ最も簡単なコードを書くことですかわった。

ドキュメント:Best Practices for Performance

関連する問題