2012年4月12日木曜日

Javaメモリーメモ(Hishidama's Java Memory(GC) Memo)


Javaメモリーメモ(Hishidama's Java Memory(GC) Memo) S-JIS[2008-08-10/2010-06-27] 変更履歴

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目次へ戻る / 新機能へ戻る / 技術メモへ戻る
メールの送信先:ひしだま

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



These are our most popular posts:

C#という言語は一般的にはどれくらい使われているのでしょうか ...

C#という言語は一般的にはどれくらい使われているのでしょうか?C++やJAVAと比較し て普及率や将来性はどうなんでしょうか?分かりやすい解説かそれが分かるWeb ページを教えてください。ちなみにプログラムにそれほど.. read more

About GlassFish — Java.net

GlassFish コミュニティってどのくらいの規模なの? GlassFish ... GlassFish コミュニティ はオープンソース Java EE 5 アプリケーションサーバーを実装しています。 GlassFish は安定した、 ... この製品に関わっている Sun と Oracle のエンジニアの数は、他の アプリケーションサーバー開発者コミュニティと同程度です。 GlassFish を ... OSI に承認 された CDDL ライセンスがこのプロジェクト GlassFish に使用されます。これにより、 開発者 ... read more

[Think IT] 第1回:Javadoc、どのくらい活用していますか? (1/3)

2007年8月17日 ... Javaで開発を行っていると、ライブラリのリファレンスとしてJavadocを参照することが 多いはずです。 ... 筆者はオープンソースのライブラリを使用するときよりも、内製の ライブラリや同じプロジェクトで他の人が作ったクラスを利用するとき ... read more

Javaって言語としてどのくらい普及してるんでしょうか? Web系は ...

Web系はほとんどJavaかと思いますが、言語全体としてはどのくらいの普及率でしょう ?まだ、C(ProC) ... VB、Cは確かに現場(工場等)で使用するクラサバ系システムが ほとんどだと思います。 アバター ... しかし、単純に普及率を聞いているのではなく、具体 的なJavaの立場を質問されているので、それを下記に回答します。 read more

Related Posts



0 コメント:

コメントを投稿