本文緊接上文的AQS源碼,如果對於ReentrantLock沒有基礎可以先閱讀我的上一篇文章學習ReentrantLock的源碼 ReentrantLock鎖重入原理 重入加鎖其實就是將AQS的state進行加一操作 然後釋放鎖資源將AQS的state進行減一操作 當state為0時才會徹底的釋放鎖 ...
轉自:
http://www.java265.com/JavaJingYan/202205/16523679023357.html
JVM擁有很多參數,如下所示
-XX:+PrintCommandLineFlags 列印出JVM運行時的各種的各項配置參數
-verbose:gc 發生GC時,列印出GC日誌
-XX:+printGC 發生GC時,列印出GC日誌
-XX:+PrintGCDetails 列印GC的詳細日誌,並且在程式運行結束是會列印出JVM的記憶體占用情況
-XX:+PrintGCDateStamps 列印GC發生的時間
-XX:+PrintGCTimeStamps 列印GC發生的時間,相對JVM啟動的時間
-Xloggc:d:\\gc.log gc日式預設是列印在控制台,添加這個參數可以指定GC日誌的輸出位置,指定後控制台就無法查看GC日誌了
-XX:+PrintHeapAtGC 每次一次GC後,都列印堆信息
-XX:+TraceClassLoading 監控類的載入
-Xmx 指定最大堆記憶體
–Xms 指定最小堆記憶體
-Xmn 設置新生代大小
-XX:NewRatio 新生代(eden+2*s)和老年代(不包含永久區)的比值 4 表示 新生代:老年代=1:4,即年輕代占堆的1/5
-XX:SurvivorRatio 設置兩個Survivor區和eden的比 8表示 兩個Survivor :eden=2:8,即一個Survivor占年輕代的1/10
-XX:+HeapDumpOnOutOfMemoryError OOM時導出堆到文件
-XX:HeapDumpPath=d:/a.dump 導出OOM的路徑
-XX:OnOutOfMemoryError 在OOM時,執行一個腳本"-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“當程式OOM時,在D:/a.txt中將會生成線程的dump可以在OOM時,發送郵件,甚至是重啟程式
XX:PermSize 設置永久區的初始空間
-XX:MaxPermSize 設置永久區最大空間
-Xss 指定棧的大小
-XX:+UseSerialGC 新生代、老年代使用串列回收,新生代複製演算法,老年代標記-壓縮
-XX:+UseParNewGC 新生代並行,老年代串列,Serial收集器新生代的並行版本,複製演算法,多線程,需要多核支持
-XX:ParallelGCThreads 限制線程數量
-XX:MaxGCPauseMills 最大停頓時間,單位毫秒,GC儘力保證回收時間不超過設定值
-XX:GCTimeRatio 0-100的取值範圍,垃圾收集時間占總時間的比 預設99,即最大允許1%時間做GC
這兩個參數是矛盾的。因為停頓時間和吞吐量不可能同時調優
-XX:+UseConcMarkSweepGC Concurrent Mark Sweep 併發標記清除,老年代收集器(新生代使用ParNew)
-XX:CMSInitiatingOccupancyFraction設置觸發GC的閾值
-XX:+ UseCMSCompactAtFullCollection Full GC後,進行一次整理,整理過程是獨占的,會引起停頓時間變長
-XX:+CMSFullGCsBeforeCompaction 設置進行幾次Full GC後,進行一次碎片整理
-XX:ParallelCMSThreads 設定CMS的線程數量
-XX:+CMSClassUnloadingEnabled:允許對類元數據進行回收
-XX:UseCMSInitiatingOccupancyOnly:表示只在到達閥值的時候,才進行CMS回收
那麼如何讀取當前JVM使用了哪些參數呢?
下文筆者講述使用java代碼讀取JVM參數的方法分享,如下所示:
實現思路:
使用 ManagementFactory.getRuntimeMXBean()
中的getInputArguments()方法即可獲取JVM運行時的參數
package com.java265.other; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.util.List; public class Test01 { /* * java265.com 示常式序 */ public static void main(String[] args) { RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean(); List<String> aList = bean.getInputArguments(); for (int i = 0; i < aList.size(); i++) { System.out.println(aList.get(i)); } } } ----運行以上代碼,將輸出以下信息----- -Dfile.encoding=UTF-8 -XX:+ShowCodeDetailsInExceptionMessages