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