4

jconsoleには「GCを実行する」ボタンがあります。そのボタンをクリックすると何が起こるかは誰にもわかりSystem.gc()ません。

4

4 に答える 4

5

あなたは自分で見つけることができます。JConsole のコードは OpenJDK の一部です。grepcode.comでも確認できます。

ボタンは、おそらくクラスによって実装されてgc()いるオブジェクト実装のメソッドを呼び出します。このクラスには、次のようなメソッドの実装が含まれています。MemoryMXBeancom.sun.management.MemoryImplgc()

public void gc() {
    Runtime.getRuntime().gc();
}

ここで、次のようなgc()メソッドの実装を考えると:java.lang.System

public void gc() {
    Runtime.getRuntime().gc();
}

あなたの質問への答えは次のとおりです。技術的にはいいえですが、同じことを行います。

于 2013-02-15T20:20:28.897 に答える
2

このリンクによると、はい、実行しますSystem.gc()

于 2013-02-15T20:14:02.320 に答える
0

内部ではほぼ同じことをしているのではないかと心配していますが、次のような説明に同意できるかどうかはわかりません。

[メモリ] タブには、いつでもクリックしてガベージ コレクションを実行できる [GC を実行] ボタンがあります。

実際にSystem.gc()VMの提案にすぎない場合:

gc メソッドを呼び出すということは、Java 仮想マシンが未使用のオブジェクトをリサイクルして、現在占有しているメモリをすばやく再利用できるようにすることを示唆しています。メソッド呼び出しから制御が戻ると、Java 仮想マシンは破棄されたすべてのオブジェクトからスペースを再利用するために最善を尽くしています。

彼らが同じことをしたとしても、いつでもできるとは言えません。

于 2013-02-15T20:20:12.140 に答える
0

かなり。JConsoleのMemoryTabの GC Button は、ターゲット JVM のMemoryMXBean.gc()を呼び出すMemoryTab.gc()を呼び出します。javadoc によると、この呼び出しはjava.lang.System.gc()と同等です。

于 2013-02-15T20:17:42.647 に答える