Javaの動作原理を知ろう2 -ガベージコレクション編-

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

 前回は「Javaヒープの動作」をご紹介しましたが、今回は続編としてJavaヒープのクリーンナップを自動的に行ってくれるガベージコレクションの動作について紹介したいと思います。各クラウドソリューションを使用したシステムの運用管理においては、ヒープ管理によるリソースの管理に加えて、ガベージコレクションの管理も必要です。適切な設定を施さないと、不必要にスケールアウト/スケールアップを行うことになりかねません…。

ガベージコレクションって?

まずは今回のスコープを決定することから始めましょう。 ガベージコレクション(GC)とは、Javaヒープ上に存在する未使用のオブジェクトを解放してくれる機能 です。この存在のおかげで開発者はリソースの管理から解放され、本来実装すべき機能要求の実装に注力できるという恩恵を得ることができます。

ただ、ガベージコレクションの存在は、JVM仕様において定義されているものの、そのアルゴリズムや実装方法は多種多様であり、数多のJVMベンダ間で、また同じベンダ内においてもバージョンによって動作やオプションに相違があります。
今回は HotSpot VM におけるガベージコレクションの種類 をご紹介してみたいと思います。

 

ガベージコレクションの種類

多くのJVM実装におけるヒープの管理については、多くのベンダが 世代別管理 を行っており、Young世代においては動作コストの小さいマイナーGCを、Old世代においては動作コストの大きいメジャーGCを動かすことで、ヒープ内の不要なオブジェクトを回収しています。
世代別管理については、詳しくは前回のコラムをご覧ください。
Javaの動作原理を知ろう① -ヒープ編-
各GCはJavaスレッドとして動作しますが、それぞれの 動作アルゴリズム を 実行時のオプション指定で変更することが可能 です。

今回検証した環境(CentOS 7.3、JDK1.8.0_111)において有効な主要なアルゴリズム は以下のとおりです。

  • シリアルコレクタ (-XX:+UseSerialGC)
  • パラレルコレクタ (-XX:+UseParallelGC)
  • コンカレントコレクタ (-XX:+UseConcMarkSweepGC)
  • ガベージファースト・ガベージコレクタ:G1GC (-XX:+UseG1GC)

上記のアルゴリズムは今回取り上げているHotSpot VMにおいて有効なもののため、お使いのJVM環境において有効なアルゴリズムは別途ご確認ください。

また、システムにおけるガベージコレクションの動作チューニングの手間を抑えるため、ガベージコレクタエルゴノミクス と呼ばれる機能によって マシンスペック に応じた自動調整 が通常は行われます。
2GB以上の物理メモリおよび2コア以上の条件がそろえば、サーバクラスマシン と認識され、それ以外の場合には クライアントクラスマシン と認識され、実行エンジン、ヒープサイズやガベージコレクタのアルゴリズム等、必要最低限ではありますが調整が行われます。

詳細のオプションについては HotSpot VMのリファレンス をご覧ください。

 

シリアルコレクタ

昨今のハードウェアの廉価化も進み、コンシューマPCにおいてもCPUコアが複数搭載されているケースも普通になってきましたが、シリアルコレクタは従来のシングルコアマシン用に設計されている最も基本的なガベージコレクタになります。特にこれといった性能上の利点はありませんが、クライアントスペックマシンにおけるデフォルトのガベージコレクタ になります。マイナーGCおよびメジャーGCともにアプリケーションスレッドの実行を中断し、シングルスレッドで動作します。

他のガベージコレクタや、JVM内部のバグ等による ワークアラウンドとして使用 することが想定されます。

2017-01-25-001_001
シリアルコレクタの動作イメージ

 

パラレルコレクタ

 

続きはこちらから・・・

 

本記事は、日本サード・パーティ株式会社(JTP)にて、執筆しています。

JTPは約30年に渡り、様々なベンダーのサポートを行う企業です。 設計、構築、開発、運用、ヘルプデスク、トレーニングなど、ITのライフサイクルを通して技術サービスを提供しています。

中でも、JTP の IT教育サービスでは、クラウド、Hadoop関連技術など、OSS の最新技術 トレーニングを数多く実施しています。

JTPでは、経験豊富なエンジニア、講師陣により、多くの技術記事を公開しております。

 

▼JTPの情報メディア「JTP Technology Port」はこちらから!

https://www.jtp.co.jp/techport/

アバター画像
プロフェッショナルサービスチームの中の人。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる