まずコードから始めましょう。私の目標はデータを完全に消すことです
Java のガベージ コレクションの仕組みは知っています。何かがそれを参照している限り、それは消えません。上記のコードは通常どおり 10 を出力できます。しかし、次の方法を知りたいです。 System.out.println(new1.num);null 例外をスローします。つまり、そのようなデータはまったくありません。letnew1=null だけとは言わないでください。
System.out.println(new1.num);
null
new1=null だけとは言わないでください。
あなたは自分で言いました、「私は Java のガベージ コレクション メカニズムを知っています。何かがそれを参照している限り、それは消えません。」 変数 "new1" はヒープ内の "new Data()" のメモリを参照し続けています。 、作成するコードがすべて null ポインター例外にならないように、リサイクルを許可するにはどうすればよいでしょうか。強参照の代わりに WeakReference を使用できます。
リーリー
JVM が gc を実行することをお勧めしますが、これは完全に拒否される可能性があります。 GC 自体は定期的に自動的に実行され、JVM が実行のタイミングを決定します。さらに、現在のバージョンにはさまざまなよりスマートなモードがあり、実行されているマシンに基づいて自動的に選択されます。確かにパフォーマンスが向上します。必要に応じて、このコマンドを使用してパフォーマンスを最適化する代わりに、GC 動作メカニズムも微調整する必要があります。
オブジェクト参照があり、削除されようとしているオブジェクトは、引き続き null に設定できます
JMM の原理を理解する前に、System.gc() をむやみに使用しないでください。オブジェクトが使い果たされたときにのみ obj=null を使用してください。
答えは「いいえ」です。これは、JVM 仕様では未定義の動作です。開発者は、仮想マシンによるオブジェクトのリサイクルを手動で支援しようとしてはなりません。 SunのJDKだと安全でないパッケージがあるようですが、使ったことがないのでそのようなAPIがあるのか分かりません。
あなたは自分で言いました、「私は Java のガベージ コレクション メカニズムを知っています。何かがそれを参照している限り、それは消えません。」 変数 "new1" はヒープ内の "new Data()" のメモリを参照し続けています。 、作成するコードがすべて null ポインター例外にならないように、リサイクルを許可するにはどうすればよいでしょうか。強参照の代わりに WeakReference を使用できます。
リーリーリーリー
JVM が gc を実行することをお勧めしますが、これは完全に拒否される可能性があります。 GC 自体は定期的に自動的に実行され、JVM が実行のタイミングを決定します。さらに、現在のバージョンにはさまざまなよりスマートなモードがあり、実行されているマシンに基づいて自動的に選択されます。確かにパフォーマンスが向上します。必要に応じて、このコマンドを使用してパフォーマンスを最適化する代わりに、GC 動作メカニズムも微調整する必要があります。
オブジェクト参照があり、削除されようとしているオブジェクトは、引き続き null に設定できます
リーリーJMM の原理を理解する前に、System.gc() をむやみに使用しないでください。オブジェクトが使い果たされたときにのみ obj=null を使用してください。
答えは「いいえ」です。これは、JVM 仕様では未定義の動作です。開発者は、仮想マシンによるオブジェクトのリサイクルを手動で支援しようとしてはなりません。 SunのJDKだと安全でないパッケージがあるようですが、使ったことがないのでそのようなAPIがあるのか分かりません。