3つ、JVMパラメーター
1.標準オプション
一般的に使用される2つがあります:
-server 选择 "server" VM
默认 VM 是 server.
-D<名称>=<值> 设置系统属性
64ビットJDK、JavaHotSpot™64ビットサーバーVM、デフォルトはサーバーオプションです
2.非標準オプション
コマンドでjava -X
設定
一般:
-Xms<size> 设置初始 Java 堆大小
-Xmx<size> 设置最大 Java 堆大小
-Xss<size> 设置 Java 线程堆栈大小
-Xmn<size> 设置新生代大小
サイズ:1g = 1024m = 1048576k = 1073741824
注:-Xss(Javaスレッドスタックサイズ)が正しく設定されていない場合java.lang.OutOfMemoryError: unable to create new native thread
、例外がスローされます
(MaxProcessMemory-JVMMemory-ReservedOSMemory)/ ThreadStackSize
スレッド数=(プロセスの最大メモリ-JVMメモリ-予約済みオペレーティングシステムメモリ)/スレッドスタックサイズ
つまり、システムが作成できるスレッドの数は、JVMに割り当てられたメモリサイズに反比例します。
デフォルトサイズ:
- Linux / x64(64ビット):1024 KB
- OS X(64ビット):1024 KB
- Windows:仮想メモリに依存
CMSガベージコレクターを使用する場合、推奨される構成は次のとおりです。
(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/ 100> = Xmn
3.不安定で、カジュアルな使用には推奨されないオプション
[1]オプションルール
メインjava -XX:参数名=参数值
とjava -XX:+参数名
[開く]、java -XX:-参数名
[閉じる]の2つがあります
[2]デフォルト値を表示する
jinfo
コマンドを使用して、指定したJavaプロセスに関する情報を表示します
jinfo -flag 参数名 进程ID 查看指定参数的信息
jinfo -flags 进程ID 查看此Java进程的所有参数设置情况
初期構成と変更された構成を表示する
java -XX:+PrintFlagsInitial 查看出厂配置
java -XX:+PrintFlagsFinal 查看修改后的配置,如果有调整,则会在等号前面添加一个冒号(:=)
プログラムの起動時に入力されたパラメータを表示する
-XX:+PrintCommandLineFlags
[3]ガベーガコレクションの詳細ログを印刷する
-XX:-XX:+PrintGCDetails
例としてJDK8を取り上げます
-Xms1m -Xmx1m -XX:+PrintGCDetails
public static void main(String[] args) {
byte[] arr = new byte[1024 * 1024];
}
[GC (Allocation Failure) [PSYoungGen: 512K->488K(1024K)] 512K->496K(1536K), 0.0006315 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 994K->488K(1024K)] 1002K->632K(1536K), 0.0024668 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 991K->488K(1024K)] 1135K->768K(1536K), 0.0015305 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 997K->488K(1024K)] 1277K->883K(1536K), 0.0026983 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[Full GC (Ergonomics) [PSYoungGen: 488K->477K(1024K)] [ParOldGen: 395K->290K(512K)] 883K->768K(1536K), [Metaspace: 2805K->2805K(1056768K)], 0.0125178 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 682K->504K(1024K)] 972K->860K(1536K), 0.0006652 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[Full GC (Ergonomics) [PSYoungGen: 504K->461K(1024K)] [ParOldGen: 356K->298K(512K)] 860K->760K(1536K), [Metaspace: 3032K->3032K(1056768K)], 0.0050665 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 461K->504K(1024K)] 760K->818K(1536K), 0.0022655 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[Full GC (Allocation Failure) [PSYoungGen: 504K->448K(1024K)] [ParOldGen: 314K->294K(512K)] 818K->742K(1536K), [Metaspace: 3032K->3032K(1056768K)], 0.0053731 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at ???.main(???.java:???)
Heap
PSYoungGen total 1024K, used 523K [0x00000000ffe80000, 0x0000000100000000, 0x0000000100000000)
eden space 512K, 14% used [0x00000000ffe80000,0x00000000ffe92e28,0x00000000fff00000)
from space 512K, 87% used [0x00000000fff80000,0x00000000ffff0148,0x0000000100000000)
to space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
ParOldGen total 512K, used 294K [0x00000000ffe00000, 0x00000000ffe80000, 0x00000000ffe80000)
object space 512K, 57% used [0x00000000ffe00000,0x00000000ffe49a48,0x00000000ffe80000)
Metaspace used 3132K, capacity 4496K, committed 4864K, reserved 1056768K
class space used 338K, capacity 388K, committed 512K, reserved 1048576K
説明:
[GC (Allocation Failure) [PSYoungGen: 512K->488K(1024K)] 512K->496K(1536K), 0.0006315 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
[GC (分配失败) [GC类型: YoungGC前新生区大小->YoungGC后新生区大小(新生区总大小)] YoungGC前堆内存大小->YoungGC后堆内存大小(堆内存总大小), YoungGC耗时] [YoungGC耗时: 用户 系统, 实际]
[Full GC (Allocation Failure) [PSYoungGen: 504K->448K(1024K)] [ParOldGen: 314K->294K(512K)] 818K->742K(1536K), [Metaspace: 3032K->3032K(1056768K)], 0.0053731 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
[Full GC (分配失败) [PSYoungGen: GC前新生区大小->GC后新生区大小(新生区总大小)] [ParOldGen: GC前养老区大小->GC后养老区大小(养老区总大小)] GC前堆内存大小->GC后堆内存大小(堆内存总大小), [Metaspace: GC前元空间内存大小->GC后元空间内存大小(元空间内存总大小)], Full GC耗时] [Full GC耗时: 用户=?.?? 系统=?.??, 实际=?.?? secs]
[4]永続的な生成サイズを調整します
-XX:PermSize=??? 设置初始永久代大小【JDK7】
-XX:MaxPermSize=??? 设置最大永久代大小【JDK7】
-XX:MetaspaceSize=??? 设置初始元空间大小【JDK8】
-XX:MaxMetaspaceSize=??? 设置最大元空间大小【JDK8】
[5]新生児領域のサイズを調整します
-XX:NewSize=??? 设置新生代初始大小,等同于-Xmn
-XX:MaxNewSize=??? 设置新生代最大大小
【6】新生児面積の割合を調整する
-XX:NewRatio=2 默认为2
[7]エデンパークの比率を調整する
-XX:SurvivorRatio=8 默认为8
[8]新しいエリアのゴミオブジェクトの生存時間を調整します
-XX:MaxTenuringThreshold=15 默认为15,且范围必须是在0到15之间
Javaバージョン「1.8.0_211」
[9]リタイアメントエリアのサイズを調整します
-XX:OldSize=???
[10] OOMが発生すると、ヒープメモリ情報を出力します
-XX:+HeapDumpOnOutOfMemoryError 默认是关闭的状态
[11]ヒープメモリのダンプファイルパスを変更します
-XX:HeapDumpPath=???
例えば:-XX:HeapDumpPath=./java_pid.hprof
[12]ヒープメモリの初期サイズを調整します
-XX:InitialHeapSize=???
と同等-Xms
で、デフォルトは物理メモリです1/64
[13]ヒープメモリの最大サイズを調整します
-XX:MaxHeapSize=???
と同等-Xmx
で、デフォルトは物理メモリです1/4
[14]仮想マシンのスタックスレッドのサイズを調整します
-XX:ThreadStackSize=???
に相当-Xss