也要以說JVM啟動的時候可以調整哪些參數,來進行調優。JVM 為垃圾收集器、堆大小和運行時編譯器提供與平臺相關的默認選擇。
性能取決于堆的大小、應用程序維護的實時數據量以及可用處理器的數量和速度.。
下面是調優的一些參數 使用命令行操作的:
1:最大暫停暫停時間目標 -XX:MaxGCPauseMillis=<nnn> :垃圾收集器需要<nnn>毫秒或更短的暫停時間,垃圾收集器將調整堆大小及與其相關的其他參數。默認情況,沒有最大暫停暫停時間目標。
2:吞吐量目標 -XX:GCTimeRatio=<nnn> :垃圾收集時間與應用程序時間的比率是 1 / (1 + <nnn>),另外 垃圾收集所花費的時間是年輕代和老年代收集的總時間。
3:GC日志 -XX:+PrintGCDetails 垃圾收集的診斷信息寫入標準輸出 -XX:+PrintGCTimeStamps 給日志添加時間戳
4:堆大小:在虛擬機初始化時,為堆保留了整個空間, -Xmx 設置保留空間的大小,也就是最大堆大小, -Xms(初始堆大小)的值如果比保留空間的值小,則不是所有的保留空間都立即交給虛擬機,未給虛擬機的空間被標記為”虛擬“,那么堆的不同部分(老生代和新生代)可以根據需要增長到虛擬空間的極限。
5:設置老年代和新生代的比率:-XX:NewRatio=3 年輕代:老年化=1:3
6:選擇垃圾收集器,也可叫作 選擇GC算法
-
串行GC XX:+UseSerialGC -
并行GCXX:+UseParallelGC 并行壓縮是并行GC的一個功能 默認啟用 關閉使用-XX:-UseParallelOldGC 并發GC -XX:+UseConcMarkSweepGC啟用 CMS 收集器-XX:+UseG1GC啟用 G1 收集器
7:指定GC日志文件 ‐Xloggc:gc.log
8:指定堆內存溢出時自動進行Dump ‐XX:+HeapDumpOnOutOfMemoryError 18 ‐XX:HeapDumpPath=/usr/local/
9:指定默認的連接超時時間 ‐Dsun.net.client.defaultConnectTimeout=2000
‐Dsun.net.client.defaultReadTimeout=2000
10:指定時區 ‐Duser.timezone=GMT+08
11: 設置默認的文件編碼為UTF‐8 ‐Dfile.encoding=UTF‐8
附加一個小實踐:使用G1啟動一個hello程序
java ‐XX:+UseG1GC ‐Xms4g ‐Xmx4g ‐Xloggc:gc.log ‐XX:+PrintGCDetails ‐XX:+PrintGCDateStamps Hello
參考:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/toc.html
查看JVM進程號:使用命令jps , 找到進程號可以使用jstack pid 來查看線程棧
使用jmap可以查看物理內存占用情況
本文來自博客園,作者:寫程序到老,轉載請注明原文鏈接:http://www.rzrgm.cn/angin-iit/p/16426709.html
浙公網安備 33010602011771號