@@ -330,7 +330,7 @@ System.out.println("total mem=" + Runtime.getRuntime().totalMemory() / 1024.0 /
330330
331331设置一个 VM options 的参数
332332
333- ```
333+ ``` plain
334334-Xmx20m -Xms5m -XX:+PrintGCDetails
335335```
336336
@@ -385,23 +385,23 @@ System.out.println("total mem=" + Runtime.getRuntime().totalMemory() / 1024.0 /
385385
386386### 4.2 调整新生代和老年代的比值
387387
388- ```
388+ ``` plain
389389-XX:NewRatio --- 新生代(eden+2\*Survivor)和老年代(不包含永久区)的比值
390390
391391例如:-XX:NewRatio=4,表示新生代:老年代=1:4,即新生代占整个堆的 1/5。在 Xms=Xmx 并且设置了 Xmn 的情况下,该参数不需要进行设置。
392392```
393393
394394### 4.3 调整 Survivor 区和 Eden 区的比值
395395
396- ```
396+ ``` plain
397397-XX:SurvivorRatio(幸存代)--- 设置两个 Survivor 区和 eden 的比值
398398
399399例如:8,表示两个 Survivor:eden=2:8,即一个 Survivor 占年轻代的 1/10
400400```
401401
402402### 4.4 设置年轻代和老年代的大小
403403
404- ```
404+ ``` plain
405405-XX:NewSize --- 设置年轻代大小
406406-XX:MaxNewSize --- 设置年轻代最大值
407407```
@@ -414,15 +414,15 @@ System.out.println("total mem=" + Runtime.getRuntime().totalMemory() / 1024.0 /
414414
415415在 OOM 时,记得 Dump 出堆,确保可以排查现场问题,通过下面命令你可以输出一个.dump 文件,这个文件可以使用 VisualVM 或者 Java 自带的 Java VisualVM 工具。
416416
417- ```
417+ ``` plain
418418-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=你要输出的日志路径
419419```
420420
421421一般我们也可以通过编写脚本的方式来让 OOM 出现时给我们报个信,可以通过发送邮件或者重启程序等来解决。
422422
423423### 4.6 永久区的设置
424424
425- ```
425+ ``` plain
426426-XX:PermSize -XX:MaxPermSize
427427```
428428
@@ -440,7 +440,7 @@ JDK5.0 以后每个线程堆栈大小为 1M,以前每个线程堆栈大小为
440440
441441#### 4.7.2 设置线程栈的大小
442442
443- ```
443+ ``` plain
444444-XXThreadStackSize:
445445设置线程栈的大小(0 means use default stack size)
446446```
@@ -453,75 +453,75 @@ JDK5.0 以后每个线程堆栈大小为 1M,以前每个线程堆栈大小为
453453
454454#### 4.8.1 设置内存页的大小
455455
456- ```
456+ ``` plain
457457-XXThreadStackSize:
458458设置内存页的大小,不可设置过大,会影响Perm的大小
459459```
460460
461461#### 4.8.2 设置原始类型的快速优化
462462
463- ```
463+ ``` plain
464464-XX:+UseFastAccessorMethods:
465465设置原始类型的快速优化
466466```
467467
468468#### 4.8.3 设置关闭手动 GC
469469
470- ```
470+ ``` plain
471471-XX:+DisableExplicitGC:
472472设置关闭System.gc()(这个参数需要严格的测试)
473473```
474474
475475#### 4.8.4 设置垃圾最大年龄
476476
477- ```
477+ ``` plain
478478-XX:MaxTenuringThreshold
479479设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代.对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,加在年轻代即被回收的概率。该参数只有在串行GC时才有效.
480480```
481481
482482#### 4.8.5 加快编译速度
483483
484- ```
484+ ``` plain
485485-XX:+AggressiveOpts
486486加快编译速度
487487```
488488
489489#### 4.8.6 改善锁机制性能
490490
491- ```
491+ ``` plain
492492-XX:+UseBiasedLocking
493493```
494494
495495#### 4.8.7 禁用垃圾回收
496496
497- ```
497+ ``` plain
498498-Xnoclassgc
499499```
500500
501501#### 4.8.8 设置堆空间存活时间
502502
503- ```
503+ ``` plain
504504-XX:SoftRefLRUPolicyMSPerMB
505505设置每兆堆空闲空间中SoftReference的存活时间,默认值是1s。
506506```
507507
508508#### 4.8.9 设置对象直接分配在老年代
509509
510- ```
510+ ``` plain
511511-XX:PretenureSizeThreshold
512512设置对象超过多大时直接在老年代分配,默认值是0。
513513```
514514
515515#### 4.8.10 设置 TLAB 占 eden 区的比例
516516
517- ```
517+ ``` plain
518518-XX:TLABWasteTargetPercent
519519设置TLAB占eden区的百分比,默认值是1% 。
520520```
521521
522522#### 4.8.11 设置是否优先 YGC
523523
524- ```
524+ ``` plain
525525-XX:+CollectGen0First
526526设置FullGC时是否先YGC,默认值是false。
527527```
0 commit comments