静的メソッドと変数は、オブジェクト指向プログラミングのすべてのインスタンスにわたって共有 ID を提供することで重要な役割を果たします。クラス。インスタンス変数とは異なり、静的変数は、作成されたオブジェクトの数に関係なく、クラスごとに 1 つだけ存在します。同様に、静的メソッドは、クラスのインスタンスを作成する必要がなく、クラス自体から直接アクセスできるクラスレベルのメソッドです。
では、静的メソッドはどこにあるのでしょうか。変数は Java に保存されますか?答えは、永続世代 (PermGen) または MetaSpace の概念にあります。 Java の古いバージョン (Java 8 より前) では、PermGen は、静的変数やメソッド コードを含むクラス関連のメタデータの保存専用のヒープ メモリの一部でした。ただし、Java 8 以降、PermGen は同じ目的を果たす Metaspace に置き換えられました。
静的変数
静的変数は単に PermGen または MetaSpace セクションに格納されます。ヒープの。各静的変数は、その値が保存される特定のメモリ アドレスを占有します。
静的メソッド
静的メソッドは、クラス データの一部として PermGen または MetaSpace 領域に保存されます。 。メソッド コードと関連するメタデータ (引数の型や戻り値の型など) はバイトコードにコンパイルされ、この専用メモリ領域に配置されます。
次の Java コードを考えてみましょう:
class A { static int i = 0; static int j; static void method() { // static k = 0; // This won't compile } }
この例では、静的変数 i と j はヒープの PermGen または MetaSpace 領域に格納されます。静的メソッドの method() も、クラス メタデータの一部として同じメモリ領域に保存されます。
静的変数と静的メソッドは、個々のライフサイクルに関係なく永続的に存在します。クラスのオブジェクト。クラス自体がメモリからアンロードされない限り、それらはガベージ コレクションの対象にはなりません。これは、クラスがアクティブなオブジェクトによって使用されなくなった場合でも、潜在的にメモリ内に無限に残る可能性があることを意味します。
以上がJava の静的メソッドと変数はメモリ内のどこに保存されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。