2
2

JVM - Adaptive Sizing

Posted at

Java仮想マシン(JVM)は、Javaアプリケーションが実行される環境を提供し、メモリ管理に関して高度な機能を数多く備えています。その中でも「Adaptive Sizing」という機能は、JVMがアプリケーションの実行状況に応じてヒープメモリのサイズを動的に調整することで、性能の最適化とリソースの効率的な利用を図るものです。

Adaptive Sizingのメカニズムと、それがHeap Committedとどのように関係するかを説明します。

Adaptive Sizingとは

Adaptive Sizingは、Javaのガーベージコレクション(GC)フレームワークの一部であり、JVMが実行時にヒープメモリのサイズやGCのパラメーターを自動調整する機能です。Adaptive Sizingの目的は、アプリケーションの性能を最適化しながら、メモリ使用量を効率的に管理することにあります。
JVMはアプリケーションが起動する際、ヒープメモリの初期サイズ(-Xms)と最大サイズ(-Xmx)を設定します。Adaptive Sizingはこのヒープメモリの範囲内で、実行中のアプリケーションのメモリ使用パターンを監視し、必要に応じてヒープサイズを動的に調整します。

この調整は、以下の目標の優先順位を基に行われます。

  1. 最大一時停止時間目標
  2. スループット目標
  3. 最少フットプリント目標

詳細に関しては、以下のJavaドキュメントに記載されています。
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/vm/gctuning/parallel.html

Heap Committedとの関係

「Heap Committed」とは、JVMが物理メモリから確保し、アプリケーションが使用可能としているヒープメモリの量を指します。つまり、JVMによって「確約された」ヒープメモリの量であり、アプリケーションが実際に消費しているメモリ量とは異なります。

Adaptive SizingとHeap Committedの関係は密接です。Adaptive Sizingによるヒープサイズの調整は、Heap Committedの量を変更することに直結します。JVMがヒープサイズを増やす決定をした場合、Heap Committedの量も同時に増加します。逆に、JVMがメモリ使用量を削減できると判断した場合、Heap Committedの量は減少することになります。

この動的な調整により、アプリケーションは必要以上にメモリを消費することなく、また必要に応じて迅速にメモリリソースを確保することが可能になります。

参考情報

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2