Javaメモリーメモ(Hishidama's Java Memory(GC) Memo)
GCは、garbage collectionあるいはgarbage collectorの略。
日本語訳は「ガベージ」「ガーベジ」「ガーベッジ」「ガーベージ」だの色々書かれるので、どれが一番普及した表記なのかよく分からない(苦笑)
Y-ADAGIOのJava訳語では「ガーベジ」、SunのAPIのJavadocやwikipediaでは「ガベージ」と書いているが、自分は「ガーベッジ」と言ってきたので、それを使うことにする。
そもそも全部カタカナで書く/言うと長いので、GCって略しちゃうのだが^^;
実行するまで名前$ =? EOF ?
Javaでは、生成したインスタンスをGC(ガーベッジコレクター)が管理している。
どこからも参照されなくなった(つまり使われなくなった)インスタンスが使っていた領域(メモリー)はGCによって解放・回収され、別のインスタンス生成で使えるようにする。この動作をGC(ガーベッジコレクト)と呼ぶ。
こういう仕組み全体の事をGC(ガーベッジコレクション)と呼ぶ。
→弱参照オブジェクト
GC(ガーベッジコレクト)が発生するタイミングはJavaVM(ガーベッジコレクター)の任意なので、いつ発生するか分からない。
System.gc()によってプログラマーがGCを発生させることは出来る。が、普通はあまり使わない。
GCが発生してオブジェクトが解放されるときにfinalize()メソッドが呼ばれる。
GCの種類(実装)も色々あり、JDKのバージョンアップに伴って改良されているし、サードパーティー製のJRE(WebLogicでも使われているJRockitとか)にとっても腕の見せ所だろう。
プラズマコンピュータのモニタはどのように動作するか
Sunのjavaコマンドには、-server・-clientという、どういうGCを行うか(?)指定するオプションがある。
また、-verbose:gcでGCの状態を表示させることが出来る。
参考:
実行中のJavaアプリケーションがどれくらいのメモリを使用しているかは、以下のメソッドで確認できる。[2006-11-09]
PCファンをきれいにする方法
Runtime runtime = Runtime.getRuntime(); System.out.println("総容量 " + runtime.totalMemory()); System.out.println("最大メモリ" + runtime.maxMemory()); System.out.println("空きメモリ" + runtime.freeMemory());
メソッド | 概要 |
---|---|
Runtime#totalMemory() | JavaVMのメモリの総容量 |
Runtime#maxMemory() | JavaVMが使用しようとする最大メモリ容量 |
Runtime#freeMemory() | JavaVM内の空きメモリ容量 |
ただし、JNIでnativeメソッド(WindowsならDLL内の関数)を呼び出している場合、メモリは別管理される。[2007-03-26]
すなわち、上記のメソッドをJNI呼び出し元で使用した場合、呼出元のメモリしか取得できない。
それらも含めた全体を知りたい場合、Windowsならtasklistでプロセス全体の使用量を見ることが出来る。
JDK1.5では、MemoryUsageクラスのメソッドも使える。[/2008-08-10]
MemoryMXBean mbean = ManagementFactory.getMemoryMXBean(); MemoryUsage usage = mbean.getHeapMemoryUsage(); System.out.printf("初期サイズ:%10d%n", usage.getInit()); System.out.printf("使用サイズ:%10d%n", usage.getUsed()); System.out.printf("保証サイズ:%10d%n", usage.getCommitted()); //JavaVMが使用できる最大サイズ System.out.printf("最大サイズ:%10d%n", usage.getMax()); //理論上の最大限使用可能なサイズ
参考:
(Windowsの場合)javaコマンドが動いているコンソール上でCtrl+Break(Pauseキー)を押すと、スレッドダンプが標準出力(つまりコンソール上)に出力される。
この末尾にメモリーの使用量が表示されている。
Java目次へ戻る / 新機能へ戻る / 技術メモへ戻る
メールの送信先:ひしだま
0 コメント:
コメントを投稿