[java] メモリ領域とガベージコレクション

■メモリの呼び名

Java のオブジェクトは、大きく分けて以下の3つのメモリ領域で管理される。

・New領域(ヒープ領域)
新しいオブジェクトが管理される。
New領域が新しいオブジェクトで一杯になると、Scavenge GCが行われて、使用されていないオブジェクトは破棄されたり別の領域に移動されたりする。

・Old領域(ヒープ領域)
古いオブジェクトが管理される。New領域で生き残ったオブジェクトが配置される。

・Permanent領域(非ヒープ領域)
クラスやメソッドの情報が格納される。

■ガベージコレクション(GC)

GCとは、ヒープ領域に空きが少なくなった時に、不要なオブジェクトを除去してメモリの空き領域を増加させてくれる処理。

Java プログラムが動作するとオブジェクトはメモリ上にロードされるため、 大きなオブジェクトを使用したり、また、使用するオブジェクトの数が多かったりすると、その分メモリの使用領域は増加する。

そのまま、新しいオブジェクトをロードし続ける と、Java が使用できるメモリ領域が一杯になる。 これを解消するために自動的に行われるメモリ掃除の仕組みがGCである。

GCには大きく以下の2つがある。

・Scavenge GC
New 領域が不足した場合に実行され、主に New 領域が対象。
比較的、頻繁に行われ、短時間で終了する。軽い。

・FULL GC
New領域、Old領域、Permanent領域全てが対象。重い。
Full GC が行われている間は、他の処理ができずアプリは待たされる。

メモリサイズにもよるが、FULL GCは数秒程度?

■設計指針

当たり前だが、、、
・メモリサイズが小さすぎると、Out of Memoryエラーのリスクが高くなる。
・メモリサイズを大きすぎると、いざFULL GCが必要となった場合の負荷が高くなる。

実行するアプリケーションにあわせて、各メモリ領域のサイジングを行う必要がある。

製品マニュアルなどの推奨値などを参考に暫定値を割り当てた上で、実際の使用状況を確認してチューニングするのが良いのかな。

各メモリ領域(New, Old, Permanent)の使用状況は、jstatコマンド等で確認できる。

■参考

とても参考になったサイト

・「Java のヒープサイズ」についての簡単な説明
http://www.whitemark.co.jp/tec/java/javaHeap.html

・ガーベジ・コレクション:GC ( Garbage Collection ) についての簡単な説明と調査方法
http://www.whitemark.co.jp/tec/java/javagc.html

・[Java][GC][チューニング][トラブルシューティング]Javaメモリ、GCチューニングとそれ にまつわるトラブル対応手順まとめAdd Star
http://d.hatena.ne.jp/learn/20090218/p1

Javaの絵本―Javaが好きになる9つの扉 Javaの絵本―Javaが好きになる9つの扉
アンク

翔泳社 2002-12
売り上げランキング : 395611

Amazonで詳しく見る by G-Tools

[Amazon] アフィリエイト紹介料受取り下限が500円になってた。

Amazonからアフィリエイト紹介料ギフト券のメールが届いていたのですが、額面が1000円を切っててアレ?っと感じました。

以前は紹介料が1500円を超えないとギフト券はもらえなかったのですが、いつの間にか受け取り下限が500円に変更されたようです。

【2013/5/17: アソシエイト・プログラム紹介料率変更のお知らせ】 
(中略)
また、紹介料受取り方法にAmazonギフト券を指定している場合の紹介料受取り下限を、現状の1,500円以上から500円に引き下げます。この変更に伴い、より手軽かつ簡単に紹介料を受け取ることが可能になります。

利用する側にとっては、早めのタイミングでもらえるようになったわけで、嬉しい変更ですね。

アフィリエイトの達人が教える! <月収別>成功体験BEST54 (得する<コレだけ!>技) アフィリエイトの達人が教える! <月収別>成功体験BEST54 (得する<コレだけ!>技)
アフィリエイト研究会

技術評論社 2011-10-29
売り上げランキング : 192757

Amazonで詳しく見る by G-Tools

[Windows] バッチコマンドでのファイル結合と追記

■copyコマンド

(1) 単一ファイルのコピー
copy コピー元ファイル名 コピー先ファイル名

(2) 複数ファイルを結合してコピー
copy コピー元ファイル名1+コピー元ファイル名2 コピー先ファイル名

(3) ワイルドカード指定でコピー
copy *.txt コピー先ファイル

※制限事項
ディレクトリでのワイルドカードは指定できない。
上書きの有無は指定できるが、追記は出来ない。

⇒copyコマンドは、複数ディレクトリにある複数ファイルの操作とは相性よくない。

■typeコマンド

ディレクトリでワイルドカード指定できないのはcopyコマンドと同じだけど、追記が可能。

(1) ワイルドカード指定で追記
type *.txt >> コピー先ファイル名
type *.log >> コピー先ファイル名

Windows コマンドプロンプト ポケットリファレンス Windows コマンドプロンプト ポケットリファレンス
山近 慶一

技術評論社 2011-12-09
売り上げランキング : 75750

Amazonで詳しく見る by G-Tools