JVMメモリ制限と調整
現在、java -jarを使用してjarファイルを実行することは、メモリが十分ではなく、仮想マシンのヒープサイズを設定する必要があることを示しています。参考資料は次のとおりです。 公式声明によると、
ヒープメモリと非ヒープメモリ
:「Java仮想マシンにはヒープがあり、ヒープはランタイムデータ領域であり、すべてのクラスインスタンスと配列のメモリはここから割り当てられます。ヒープは、Java仮想マシンの起動時に作成されます。」「JVMのヒープ外のメモリは、非ヒープメモリと呼ばれます。」JVMは主にヒープと非ヒープの2種類のメモリを管理していることがわかります。簡単に言えば、ヒープはJavaコードがアクセスできるメモリであり、開発者が使用するために予約されています。非ヒープはJVMが独自に使用するために予約されているため、メソッド領域、JVMの内部処理、またはメモリ最適化に必要なもの(JITコンパイル済みコードキャッシュなど)、各クラス構造(ランタイム定数プール、フィールドおよびメソッドデータなど)、およびメソッドのコードと構築メソッドはすべて非ヒープメモリにあります。
ヒープメモリの割り当て
JVMの最初に割り当てられたメモリは -Xmsで指定され、デフォルトは物理メモリの1/64です。JVMによって割り当てられた最大メモリは-Xmxで指定され、デフォルトはの1/4です。物理メモリ。デフォルトの空きヒープメモリが40%未満の場合、JVMはヒープを最大制限の-Xmxまで増やします。空きヒープメモリが70%を超える場合、JVMは最小制限の-Xmsまでヒープを減らします。 。したがって、サーバーは通常、各GCの後にヒープサイズを調整しないように、-Xmsと-Xmxを等しく設定します。
非ヒープメモリ割り当て
JVMは-XX:PermSizeを使用して非ヒープメモリ の初期値を設定します。デフォルトは物理メモリの1/64です。XX:MaxPermSizeは最大非ヒープメモリサイズを設定します。デフォルトは1/4です。物理メモリの。
JVMメモリ制限(最大)
まず、JVMメモリは実際の最大物理メモリに制限されます(ナンセンス!ハハ)。物理メモリが無限であると仮定すると、最大JVMメモリはオペレーティングシステムと大きな関係があります。簡単に言えば、32ビットプロセッサには4GBの制御可能なメモリスペースがありますが、特定のオペレーティングシステムには制限があり、この制限は通常2GB〜3GBです(通常、Windowsシステムでは1.5G〜2G、Linuxシステムでは1.5G〜2G) 2G-3G)、64ビットを超えるプロセッサには制限はありません。
通常、メモリオーバーフローなどの問題を回避するために、環境変数
JAVA_OPTS -Xms256M -Xmx512Mなどを設定する必要があり ます。[サーバーの場合、通常は同じに設定します]
が、この設定が機能しない場合があります(たとえば、サーバーアプリケーションより多くのクラスをロードするとき、つまりjvmがクラスをロードするとき、永続ドメイン内のオブジェクトは急激に増加するため、jvmは永続ドメインサイズを常に調整します。調整を回避するために、より多くのパラメーター構成を使用できます。例
:java -Xms512m -Xmx512m -XX:PermSize = 64m -XX:MaxPermSize = 128m
その中で、-XX:MaxPerSizeフラグを使用して永続ドメインのサイズを増やし、-XX:PerSizeフラグを使用して初期値
リファレンス:
http ://wallimn.javaeye.com/blog/505610
転載:https://my.oschina.net/acmfly/blog/113256