JavaにおけるSystem gcとRuntime gcの主な違いは、System gcがクラスメソッドであるのに対して、Runtime gcはインスタンスメソッドであることです。
Javaは高水準の汎用プログラミング言語です。
堅牢かつ安全であり、プラットフォームに依存せず、マルチスレッドをサポートしています。
さらに、オブジェクト指向のプログラミングが可能である。
そのため、Javaを使ってアプリケーションを構築するために、実世界のシナリオをモデル化することが容易です。
Java のもう一つの重要な利点は、ガベージコレクタを提供することです。
ガベージコレクタは、使われていないオブジェクトを自動的に破棄し、より良いメモリ管理を提供します。
ガベージコレクタの実行は自動処理だが、JVMにガベージコレクタの実行を要求することも可能である。
システムgcとランタイムgcは、ガベージコレクタを実行するためにJVMを要求する2つのそのような方法です。
システムgcとは
システムクラスには、gc()というメソッドがあります。
これは、ガベージコレクタを実行するものです。
このメソッドは、finalize()メソッドを呼び出して、使わなくなったオブジェクトを破棄します。
Javaでは、オブジェクトはヒープに生成されます。
通常、JVMは暗黙のうちにガベージコレクタを呼び出します。
しかし、ガベージコレクタを不必要に呼び出すことはありません。
ヒープにあるオブジェクトが数個だけだと仮定します。
そうすると、JVMはガベージコレクタを呼び出さない。
ヒープ・メモリが少なくなったときだけ、ガベージ・コレクターを呼び出すのです。
例えば、新しいオブジェクトを作成する必要があり、ヒープ内のメモリが少ないと仮定します。
まず、ガベージコレクタは参照されないオブジェクトを探します。
そして、finalizeメソッドを呼び出します。
次に、そのオブジェクトの割り当てられたリソースを解放し、オブジェクトを破棄します。
最後に、JVMはそのメモリを新しく作成されたオブジェクトに割り当てます。
このプロセス全体は、より多くの時間を要します。
その代わりに、プログラマはSystem.gc()メソッドを呼び出すことができます。
これは、ガベージコレクタをバックグラウンドで継続的に実行するようにJVMに要求するものです。
ランタイムgcとは
Runtime gcのタスクは、System gcと同じです。
JVMにガベージコレクタを継続的に実行するように指示するメソッドです。
クラスメソッドであるRuntime gcとは異なり、Runtime gcはインスタンスメソッドです。
System gcとRuntime gcの大きな問題点は、パフォーマンスの問題を引き起こす可能性があることです。
システムgcとランタイムgcの関係
- gc()は内部でRuntime.gc()を呼び出します。
システム gc とランタイム gc の違い
定義
システムgcは、Java仮想マシン(JVM)がガベージコレクタを実行して、未使用のオブジェクトからメモリを取得し、現在のオブジェクトのためのメモリを作成するように指示するクラスメソッドです。
Runtime gcは、Java Virtual Machine(JVM)にガベージコレクタを実行させ、未使用のオブジェクトからメモリを取得して、現在のオブジェクトのメモリにするように指示するインスタンスメソッドです。
基本情報
したがって、システム gc とランタイム gc の主な違いは、システム gc がクラスメソッドであるのに対し、ランタイム gc はインスタンスメソッドであることである。
タイプ
システムgcとランタイムgcのもう一つの違いは、システムgcが非ネイティブメソッドであるのに対して、ランタイムgcはネイティブメソッドであることです。
宣言
java.lang.System.gc() メソッドの宣言は、public static void gc() です。
java.lang.Runtime.gc()メソッドの宣言は、public void gc()です。
結論
ガベージコレクタは、到達不可能なオブジェクトを破壊することでヒープメモリを解放する。
JVMにガベージコレクタの実行を要求する方法として、System gcとRuntime gcの2つがあります。
Javaにおけるシステムgcとランタイムgcの基本的な違いは、システムgcはクラスメソッドであり、ランタイムgcはインスタンスメソッドであることです。
通常は、System gcの方がRuntime gcより便利です。