は、未使用のインポートとても好きです - インポートandroid.widget.RelativeLayout。メモリを食べる? どれだけ価値があるか、それとも価値があるのかを知りたいだけですか? これは愚かな質問かもしれませんが、答えが見つかりませんでした。未使用のインポート宣言はJavaでメモリを消費しますか?
答えて
ありません、彼らは任意のメモリを取ることはありません。インポートは、コンパイル時にクラス名を解決するためにコンパイラによって使用されます。
コンパイラは、完全修飾名に各クラス名を変更します。 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
に置き換えられ、バイトコードでインポート文がないことがわかります。
ありがとうございました! –
この回答は私には意味がありますが、私はJavaプロジェクトでこれと矛盾しているような問題がありました。私はクラスをコンパイルし、いくつかのインポートとその参照を難読化して他の難読化されたコードで動作させるプログラムを実行し、そのクラスを逆コンパイルして、今は難解な古いクラスのインポートステートメントを見てみましょう。これらのクラスがコード内で使用されなくなった場合、どのようにデコンパイラがこれらのインポート文を取得しますか?彼らは編集で失われてはいけませんか? (私はこれを新しい質問として投稿するべきですか?) – Variadicism
気にしないでください。忘れてください。私はreobfuscatorがちょうど半分仕事をしていると信じています。私は、それが輸入声明がまだそこにある理由だと考えています。逆コンパイラは、おそらくそれらをより良く見えるようにするために、それらのimport文を記述しています。 – Variadicism
未使用のインポートは、実行時に影響を与えません(バイトコードにインポートがないため)。ただし、未使用のインポートはコンパイラには影響しますが、あまり多くは影響しません。
一般に、必要なものだけをインポートすると、コードの保守性と可読性が向上します。
コンパイラは、コンパイル後にコンパイラを削除しません。あなたはjarファイルからいくつかのクラスをインポートして、後からの輸入をjarファイルを削除したが、そうでない場合でも、二人は問題あなたが
- コードをすっきり
- に直面する可能性があり、あなたは
に、実行時には影響を与え時エラーをコンパイルしないことがあります。これはコンパイルプロセスを非常に小さなビット(測定不可能)にします。しかし、ファイルを作成する限り、ファイルを小さくし、インポートが実際に使用されていることを読みやすくするため、ファイルを削除する方が良いです。
+1は、自己文書化の側面です。これは、使用されているクラスだけを明示的にインポートする主な理由です。 –
影響なし何らかのrumtimeコンパイラ時間、
が、最善のアプローチは、これは、コードの保守性を向上させ、それが合理的にそれがある後でさえも行い確保することができますようすることができます最も明確かつ最も簡単なコードを書くことですかわった。
- 1. 未使用のオフセットのPHP配列のメモリ消費
- 2. メモリ消費量javaファイルストリーム
- 3. メモリ消費UCanAccess
- 4. Javaアプリケーションはますます2GBまでのメモリを消費しています。
- 5. EFのメモリ消費
- 6. iPhoneのメモリ消費
- 7. タイマーコントロールのメモリ消費
- 8. C18:未使用のライブラリ関数はEPROMの領域を消費しますか?
- 9. Javaが多すぎるメモリを消費しています
- 10. Java Webアプリケーションのメモリ消費量(300MBが高すぎますか?)
- 11. Int64を使用したhaskellでのメモリ消費
- 12. expatパーサー:メモリ消費
- 13. C++でメモリ使用量を追跡し、メモリ消費量を評価する
- 14. TortiseSVNでのtsvncache.exeのメモリ消費を制限しますか?
- 15. Javaのストリームはどのようにメモリ消費に影響しますか?
- 16. SQL Server 2008は多くのメモリを消費しますか?
- 17. SQL Server 2k5のメモリ消費?
- 18. メモリ消費アプリケーションの作成
- 19. (iphone)はUIImageより少ないメモリを消費しますか?
- 20. Swift 2.0未宣言型の使用UIColor
- 21. 文字列とPOJOの使用...より多くのメモリを消費します
- 22. visual studio 2010メモリ消費
- 23. なぜ私のハッシュセットはメモリを消費するのですか?
- 24. 多くの同一の匿名クラスを宣言すると、Javaのメモリが浪費されますか?
- 25. NSRunLoopは多くのCPUとメモリを消費しています
- 26. Webワーカーは大量のメモリを消費します
- 27. iOS Webアプリケーションでのイメージのメモリ消費
- 28. eval()を使用するとメモリ消費量が増えますか?
- 29. Javaでbyte []を宣言しますか?
- 30. using宣言は、using宣言の上に宣言されたオーバーロードだけをインポートしますか?例えば
の可能性のある重複した[未使用のインポートおよびオブジェクトは、パフォーマンスへの影響を持っています](http://stackoverflow.com/questions/8724045/does-unused-import-and -objects-have-an-performance-impact) – jonayreyes