Java JVM 參數(shù)優(yōu)化

更多 Java 虛擬機(jī)方面的文章,請參見文集《Java 虛擬機(jī)》


打印參數(shù)值

-XX:+PrintFlagsFinal

[Global flags]
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
    uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
    uintx AdaptiveSizeThroughPutPolicy              = 0                                   {product}
    uintx AdaptiveTimeWeight                        = 25                                  {product}
     bool AdjustConcurrency                         = false                               {product}
     bool AggressiveOpts                            = false                               {product}
     intx AliasLevel                                = 3                                   {C2 product}
     bool AlignVector                               = true                                {C2 product}
     intx AllocateInstancePrefetchLines             = 1                                   {product}
......
......
......

取消偏向鎖

-XX:-UseBiasedLocking
JDK 1.6 默認(rèn)開啟偏向鎖:嘗試把鎖給訪問它的第一個線程,取消 synchronized 原語。

  • 在單線程模式下,開啟偏向鎖會提升性能,因?yàn)闊o需在進(jìn)行 synchronized 判斷。
  • 在多線程模式下,JVM 就需要取消偏向鎖

設(shè)置 AutoBoxing 大小

默認(rèn) cache -128~127 之間的 int 和 long。
-XX:AutoBoxCacheMax=10000

Out of Memory 時打印 HeapDump

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=...

內(nèi)存大小

Heap 相關(guān):
-Xms512M -Xmx1024M 堆內(nèi)存的初始值及最大值

新生代相關(guān):
-Xmn128M 堆中 Young Generation 新生代內(nèi)存初始值
-XX:NewSize=128M 等同于 -Xmn128M
-XX:MaxNewSize=256M 堆中 Young Generation 新生代內(nèi)存最大值
新生代內(nèi)存過大,會降低 GC 的頻率,但是會增加每次 GC 時 STW 的時間

永久代相關(guān):
-XX:PermSize=64M 堆中 Perm Generation 永久代內(nèi)存初始值
-XX:MaxPermSize=128M 堆中 Perm Generation 永久代內(nèi)存最大值
永久代存儲類的定義及常量池,是一塊連續(xù)的堆空間,默認(rèn) 64M。

Java 8 取消了永久代,替換為 Metaspace,默認(rèn)128M:
-XX:MetaspaceSize=128M Metaspace內(nèi)存初始值
-XX:MaxMetaspaceSize=256M Metaspace內(nèi)存最大值

堆外相關(guān)/直接內(nèi)存,被 netty 等使用:
-XX:MaxDirectMemorySize=128M 堆外內(nèi)存最大值

GC 優(yōu)化

XX:+UseConcMarkSweepGC 啟用 CMS,并行垃圾回收
XX:+PrintGCDetails 打印 GC 日志
XX:+PrintGCApplicationStoppedTime 打印 GC 的停頓時間

面向 GC 的編程

  • 基于數(shù)組的集合指定初始化大小,例如 ArrayList, HashMap
  • 對象不需要時,將引用設(shè)置為 null
  • 對象重用,例如線程池
  • 使用不可變對象
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容