Javaでガベージコレクション(GC)を明示的に呼び出すにはどうすればよいですか?
オブジェクトへの参照がすべてなくなると、そのオブジェクトはファイナライズされ、ガベージコレクション(GC)が起動したタイミングで回収されます。この処理は通常、JVMによって自動的に行われます。
プログラマー側からGCを明示的に呼び出すことも可能ですが、呼び出したからといってGCが即座に実行される保証はない点に注意が必要です。あくまでJVMに対する「実行の提案」にすぎません。
Javaでガベージコレクションを明示的に呼び出す方法は、主に以下の2つがあります。
- System.gc() メソッド
- Runtime.getRuntime().gc() メソッド
java.lang.Runtime クラスの freeMemory() メソッドは、JVM内で利用可能な空きメモリの量を返します。gc() メソッドを呼び出して不要なオブジェクトが回収されると、freeMemory() の戻り値が増加する可能性があります。この挙動を利用すると、GCの効果を簡単に確認できます。
サンプルコード
public class GarbageCollectionTest {
public static void main(String args[]) {
System.out.println(Runtime.getRuntime().freeMemory());
for (int i = 0; i <= 100000; i++) {
Double d = new Double(300);
}
System.out.println(Runtime.getRuntime().freeMemory());
System.gc();
System.out.println(Runtime.getRuntime().freeMemory());
}
}このプログラムでは、まず初期状態の空きメモリを表示し、その後10万個の Double オブジェクトを生成します。オブジェクト生成後はメモリ消費により空き容量が減少しますが、System.gc() を呼び出すことで不要になったオブジェクトが回収され、空きメモリが再び増加していることが確認できます。
実行結果
15648632 13273472 15970072
上記の出力例では、オブジェクト生成後に空きメモリが約237万バイト減少しましたが、System.gc() の呼び出し後には初期値以上の空きメモリが確保されています。なお、実際の数値は実行環境やJVMの設定によって異なるため、あくまで参考値としてください。
-
Javaで編集可能なJLabelを実装する方法
JLabelとはJLabelクラスはJComponentクラスを継承しており、JLabelのオブジェクトを使用することで、GUI上にテキストによる説明や情報を表示できます。JLabelの主な特徴は以下のとおりです。1行の読み取り専用テキスト、画像、またはその両方を表示できる重要なメソッドとして、setText()、setIcon()、setBackground()、setOpaque()、setHorizontalAlignment()、setVerticalAlignment()などが用意されているPropertyChangeListenerインターフェースを明示的に登録して、プロパティの変
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー