0

私はメモ帳(Windows 7)でプログラムを実行しています。パッケージ全体をインポートするとコードが簡単になりますが、冗長コマンドを使用するとプログラムがかなり重くなります。Java クラスをコンパイルして実行しているときに、不要なクラス ファイルが多数コードに読み込まれました。クラス ファイルの不要な読み込みを防ぐための Java の機能はありますか?

IDE があることは知っていましたが、今はメモ帳に慣れています。パッケージが完全にインポートされたときにコンパイルするプログラムへの不要なクラスのロードを回避する機能があるかどうか誰かが提案しますか?

いつGCを実行する必要がありますか(コンポーネントの追加/アクションイベントの設定時などの特定の領域)?

4

2 に答える 2

3

Java は、メモ帳用に注意深く最適化された言語ではありません。インポート ステートメントはその代表的な例です。これらを管理する IDE がなければ、日々の煩わしさを経験することになります。最終的には屈服し、メモ帳で Java をコーディングするのは快適ではないことを認めるでしょう。

直接の質問への回答:

  1. import ステートメントは、クラスのロードとは関係ありません。コードで使用する単純なクラス名の完全修飾名を解決するためだけに存在します。クラスは最初の使用時に厳密にオンデマンドで初期化され、クラスがロードされる方法は実装固有ですが、通常は遅延もあります。

  2. Java のガベージ コレクションは完全に自動化されているため、自分で実行しないでください。実際、そうするメカニズムはありません。ランタイムへのヒントSystem.gcにすぎません。

于 2012-10-31T09:38:09.833 に答える
1

次の簡単なコード スニペットを検討してください。

public class HelloWorld {

    public static void main(String[] args) {
        List<Object> l = new Vector<Object>();
        System.out.println("Hello World:" + l.size());
    }
}

Listとを使用するにVectorは、次のいずれかを行う必要があります

import java.util.*;

また

import java.util.List;
import java.util.Vector;

または、コード内のクラス名にパッケージ名を追加して、インポートをまったく使用しないこともできます。

どちらの場合でも、からの出力java -verboseはまったく同じです。さらに、どちらの場合も、この単純なコード用にロードされる 347 個のクラスがリストされています。その理由はHelloWorld.class、 、 、java.util.List.classおよびだけjava.util.Vector.classでなく、アプリケーションを実行するために Java ランタイムが必要とする依存クラスもロードする必要があるためです (この例では、これにはjava.lang.System.classと からのいくつかのクラスが含まれjava.io、取り込まれます)。参照を通じてSystem.out)。

そのため、完全なパッケージをインポートすることによるパフォーマンスへの影響はありません。クラス ファイル レベルでは、すべてのクラスは、パッケージ名を含む完全修飾名で参照されます。これは、クラスのインポート方法とは無関係です。

于 2012-10-31T09:52:23.307 に答える