4

私の AP コンピューター サイエンスの先生は、Java ガベージ コレクションは非静的メソッドにしか影響を与えず、使用されなくなった静的メソッドは余分なメモリを占有するため、静的メソッドを使用しないように私に言いました。私は、GC がどのメソッドにも影響を与えるべきではなく、オブジェクトだけに影響を与えるべきであることにほぼ確信を持っていますが、何かを言う前に確認したかったのです。では、GC はメソッドと関係があるのでしょうか?

4

3 に答える 3

8

彼女がフィールドではなくメソッドを本当に言ったと仮定すると、この場合、あなたの先生は間違っています。あなたが言うように、ガベージ コレクションは割り当てられたオブジェクトからメモリを回収するプロセスであり、それらを割り当てたメソッドのスコープは関係ありません。

補足として、静的フィールドは別の問題です。オブジェクトを static フィールドに保持すると (通常)、ガベージ コレクターがその処理を実行できなくなります。クラスは常にオブジェクトへの参照を保持し、コレクションの対象にならないからです。

于 2012-09-16T19:15:10.897 に答える
1

Java ガベージ コレクションは非静的メソッドにのみ影響するため、静的メソッドを使用してください。したがって、使用されなくなった静的メソッドは余分なメモリを占有します。

あなたは彼/彼女が言ったことを理解していないと思います。メソッドは、その ClassLoader がアンロードされたときにのみアンロードされますが、ほとんどの Java SE プログラムではアンロードされません。

于 2012-09-16T19:13:54.347 に答える
1

先生が間違っていると思います。オブジェクトがクローンされるとメソッドもコピーされると思うかどうかを彼/彼女に尋ねますか? 彼/彼女がそう言うなら、彼/彼女は本当に間違っています.

メソッドはコードであり、コードは静的です。つまり、クラスが存在するときは常に 1 つのインスタンスに存在します。

于 2012-09-16T19:20:48.817 に答える