連載
Javaはどのように動くのか~図解でわかるJVMの仕組み
あたりまえのようでいて意外と知らないJava,特にJVMの仕組み。JVMは実行環境としてRuby,Pythonなどさまざまな言語を動かせるようになり,Facebookでも使われていたりしますが,それは自動メモリ管理などさまざまな利点があるためです。本連載では,Garbage Colector(GC)とメモリ構造(ヒープ)の仕組みから,パフォーマンスとの関係までを解説していきます。
- 第9回 [最終回]HotSpot JVMのGCを選択しよう
- 4つのGCを使いこなす
- どのようにGCを使い分けるか
- まとめ
2013年8月26日
- 第8回 イレギュラーなヒープの動作を理解する
- Tenured領域を早く使ってしまうパターン
- オブジェクトがEden領域に入らないときの2つの解決法
- Survivor領域に入らないオブジェクトはどのように処理されるのか
2013年7月1日
- 第7回 HotSpot JVMではどのようにオブジェクトが移動するのか
- 1回目のマイナーGCまでの流れを把握する
- 2回目のマイナーGCでは動作が異なる
- マイナーGCでEden領域がTo領域にならない点に注意
- 停止時間を短くするには
- イレギュラーなパターンも知っておく必要が
2013年5月22日
- 第6回 HotSpot JVMのヒープ構造の仕組みを把握する
- ヒープ構造は2つの領域から成り立つ
- オブジェクトの寿命をふまえて3つのNew領域を使い分ける
2013年5月10日
- 第5回 チューニングのために理解しておきたいGCの4つのアルゴリズム
- なぜアルゴリズムを学ぶのか
- GCを2つのフェーズに分けて実行する ~マーク&スイープGC
- バラバラに配置されていたオブジェクトを連続して配置する ~コンパクション
- GCと同時にコンパクションを実行する ~コピーGC
- 「一世代ヒープ」の問題を考える
- 「世代別ヒープ」でGCの時間を減らす
2013年3月27日
- 第4回 3つのGCを使い分けて停止時間を最小にする
- 3つのGCを使い分けてCPUの使用率をコントロールする
- 最もシンプルな「シリアルGC」
- 複数スレッドで実行して停止時間を短縮する「パラレルGC」
- アプリケーションと同時にGCを動作させる「コンカレントGC」
2013年3月6日
- 第3回 システムトラブルの原因はGCの実装を知れば見えてくる
- システムが無反応になってしまう3つの原因
- GCの実行頻度を握るのは「生きてるオブジェクト」の量とヒープサイズ
- GCの停止時間は「スループット」と「レスポンスタイム」で考える
- 停止時間に対する2つのアプローチ
2013年2月13日
- 第2回 ヒープが再利用される仕組みを理解する
- 不要なオブジェクトを回収するしくみ~ガベージコレクタ
- GCはJVMが自動的に実行してくれる
- オブジェクトが生成されてからGCの対象となるまでの流れ
- なぜGC後でもヒープの使用量が上がってしまうか~メモリリーク
- オブジェクトがGCに回収される前に処理を行うには~ファイナライザ
2013年1月30日
- 第1回 JVMはどのようにメモリ空間を利用するのか
- あのWebサービスもJVMを利用している
- メモリ空間を分けて使用する
- Javaヒープは「建物」,Cヒープやスレッドスタックは「庭」
- オブジェクトの生成とヒープの関係
- ヒープはどのように使われていくのか
2013年1月16日