欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java虛擬機(jī)GC日志分析

 更新時(shí)間:2018年02月02日 10:14:21   作者:Mirhunana  
這篇文章主要介紹了Java虛擬機(jī)GC日志分析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下

本文研究的主要是Java虛擬機(jī)中g(shù)c日志的理解問(wèn)題,具體如下。

一、日志分析

理解GC日志是處理Java虛擬機(jī)內(nèi)存問(wèn)題的基本技能。

通過(guò)在java命令種加入?yún)?shù)來(lái)指定對(duì)應(yīng)的gc類型,打印gc日志信息并輸出至文件等策略。

1、編寫(xiě)java代碼

public class ReferenceCountingGC {
	public Object instance = null;
	private static final int ONE_MB = 1024 * 1024;
	private byte[] bigSize = new byte[2 * ONE_MB];
	public static void main(String[] args) {
		testGC();
	}
	public static void testGC() {
		ReferenceCountingGC objA = new ReferenceCountingGC();
		ReferenceCountingGC objB = new ReferenceCountingGC();
		objA.instance = objB;
		objB.instance = objA;
		objA = null;
		objB = null;
		System.gc();
	}
}

2、編譯java文件

javac ReferenceCountingGC.java 

3、執(zhí)行class文件

java -XX:+PrintGCDateStamps -XX:+PrintGCDetails ReferenceCountingGC

對(duì)應(yīng)的參數(shù)列表

-XX:+PrintGC 輸出GC日志
-XX:+PrintGCDetails 輸出GC的詳細(xì)日志
-XX:+PrintGCTimeStamps 輸出GC的時(shí)間戳(以基準(zhǔn)時(shí)間的形式)
-XX:+PrintGCDateStamps 輸出GC的時(shí)間戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在進(jìn)行GC的前后打印出堆的信息
-Xloggc:../logs/gc.log 日志文件的輸出路徑

結(jié)果輸出:

2016-03-20T14:34:55.118-0800: [GC [PSYoungGen: 6123K->400K(38912K)] 6123K->400K(125952K), 0.0012070 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
2016-03-20T14:34:55.119-0800: [Full GC [PSYoungGen: 400K->0K(38912K)] [ParOldGen: 0K->282K(87040K)] 400K->282K(125952K) [PSPermGen: 2622K->2621K(21504K)], 0.0084640 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
Heap
PSYoungGen total 38912K, used 1013K [0x00000007d5500000, 0x00000007d8000000, 0x0000000800000000)
eden space 33792K, 3% used [0x00000007d5500000,0x00000007d55fd7d0,0x00000007d7600000)
from space 5120K, 0% used [0x00000007d7600000,0x00000007d7600000,0x00000007d7b00000)
to space 5120K, 0% used [0x00000007d7b00000,0x00000007d7b00000,0x00000007d8000000)
ParOldGen total 87040K, used 282K [0x0000000780000000, 0x0000000785500000, 0x00000007d5500000)
object space 87040K, 0% used [0x0000000780000000,0x0000000780046bf8,0x0000000785500000)
PSPermGen total 21504K, used 2628K [0x000000077ae00000, 0x000000077c300000, 0x0000000780000000)
object space 21504K, 12% used [0x000000077ae00000,0x000000077b091380,0x000000077c300000)

PSYoungGen表示新生代,這個(gè)名稱由收集器決定,這里的收集器是Parallel Scavenge。老年代為ParOldGen,永久代為PSPermGen

  • 如果收集器為ParNew收集器,新生代為ParNew,Parallel New Generation
  • 如果收集器是Serial收集器,新生代為DefNew,Default New Generation

可以看到上面有兩種GC類型:GC和Full GC,有Full表示這次GC是發(fā)生了Stop-The-World的。

新生代GC(Minor GC):指發(fā)生在新生代的垃圾收集動(dòng)作,因?yàn)镴ava對(duì)象大多都具備朝生夕滅的特性,所以Minor GC非常頻繁,一般回收速度非??臁?/p>

老年代GC(Major GC/Full GC):指發(fā)生在老年代的GC,出現(xiàn)了Major GC,經(jīng)常會(huì)伴隨至少一次的Minor GC,Major GC的速度一般會(huì)比Minor GC慢10倍以上。

[GC [PSYoungGen: 6123K->400K(38912K)] 6123K->400K(125952K), 0.0012070 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

上面方括號(hào)內(nèi)部的6123K->400K(38912K),表示GC前該內(nèi)存區(qū)域已使用容量->GC后該內(nèi)存區(qū)域已使用容量,后面圓括號(hào)里面的38912K為該內(nèi)存區(qū)域的總?cè)萘俊?/p>

方括號(hào)外面的6123K->400K(125952K),表示GC前Java堆已使用容量->GC后Java堆已使用容量,后面圓括號(hào)里面的125952K為Java堆總?cè)萘俊?/p>

[Times: user=0.00 sys=0.00, real=0.00 secs]分別表示用戶消耗的CPU時(shí)間,內(nèi)核態(tài)消耗的CPU時(shí)間和操作從開(kāi)始到結(jié)束所經(jīng)過(guò)的墻鐘時(shí)間(Wall Clock Time),CPU時(shí)間和墻鐘時(shí)間的差別是,墻鐘時(shí)間包括各種非運(yùn)算的等待耗時(shí),例如等待磁盤(pán)I/O、等待線程阻塞,而CPU時(shí)間不包括這些耗時(shí)。

二、GC日志的離線分析

可以使用一些離線的工具來(lái)對(duì)GC日志進(jìn)行分析,比如sun的gchisto( https://java.net/projects/gchisto),gcviewer( https://github.com/chewiebug/GCViewer ),這些都是開(kāi)源的工具,用戶可以直接通過(guò)版本控制工具下載其源碼,進(jìn)行離線分析。

總結(jié)

以上就是本文關(guān)于Java虛擬機(jī)GC日志分析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • IntelliJ IDEA設(shè)置JVM運(yùn)行參數(shù)的操作方法

    IntelliJ IDEA設(shè)置JVM運(yùn)行參數(shù)的操作方法

    這篇文章主要介紹了IntelliJ IDEA設(shè)置JVM運(yùn)行參數(shù)的操作方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-03-03
  • spring MVC搭建及配置詳解

    spring MVC搭建及配置詳解

    本篇文章主要介紹了spring MVC配置方法,要想靈活運(yùn)用Spring MVC來(lái)應(yīng)對(duì)大多數(shù)的Web開(kāi)發(fā),就必須要掌握它的配置及原理,有興趣的可以了解一下。
    2017-01-01
  • JSON的String字符串與Java的List列表對(duì)象的相互轉(zhuǎn)換

    JSON的String字符串與Java的List列表對(duì)象的相互轉(zhuǎn)換

    這篇文章主要介紹了JSON的String字符串與Java的List列表對(duì)象的相互轉(zhuǎn)換,如果在瀏覽器端JSON是list則轉(zhuǎn)為string結(jié)構(gòu)來(lái)處理,需要的朋友可以參考下
    2016-04-04
  • SpringBoot后端接收參數(shù)優(yōu)化代碼示例(統(tǒng)一處理前端參數(shù))

    SpringBoot后端接收參數(shù)優(yōu)化代碼示例(統(tǒng)一處理前端參數(shù))

    使用Spring Boot開(kāi)發(fā)API的時(shí)候,讀取請(qǐng)求參數(shù)是服務(wù)端編碼中最基本的一項(xiàng)操作,下面這篇文章主要給大家介紹了關(guān)于SpringBoot后端接收參數(shù)優(yōu)化(統(tǒng)一處理前端參數(shù))的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片方式

    javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片方式

    為了批量處理大量圖片的旋轉(zhuǎn),可以使用javacv-ffmpeg結(jié)合ProcessBuilder,首先在maven配置文件中添加ffmpeg及javacpp依賴,javacpp支持調(diào)用C/C++方法,而ffmpeg基于C語(yǔ)言,使用ProcessBuilder創(chuàng)建進(jìn)程調(diào)用ffmpeg方法
    2024-09-09
  • 基于Properties實(shí)現(xiàn)配置數(shù)據(jù)庫(kù)驅(qū)動(dòng)

    基于Properties實(shí)現(xiàn)配置數(shù)據(jù)庫(kù)驅(qū)動(dòng)

    這篇文章主要介紹了基于Properties實(shí)現(xiàn)配置數(shù)據(jù)庫(kù)驅(qū)動(dòng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java線程安全和鎖Synchronized知識(shí)點(diǎn)詳解

    Java線程安全和鎖Synchronized知識(shí)點(diǎn)詳解

    在本篇文章里小編給大家分享的是關(guān)于Java線程安全和鎖Synchronized相關(guān)知識(shí)點(diǎn),有需要的朋友們可以參考下。
    2019-08-08
  • WebSocket 中使用 @Autowired 注入對(duì)應(yīng)為null的解決方案

    WebSocket 中使用 @Autowired 注入對(duì)應(yīng)為null的解決方案

    SpringBoot集成WebSocket時(shí),會(huì)遇到service對(duì)象為null的情況,原因是Spring默認(rèn)為單例模式與WebSocket的多對(duì)象模式相沖突,當(dāng)客戶端與服務(wù)器端建立連接時(shí),會(huì)創(chuàng)建新的WebSocket對(duì)象,本文給大家介紹WebSocket 中使用 @Autowired 注入對(duì)應(yīng)為null的問(wèn)題,感興趣的朋友一起看看吧
    2024-10-10
  • 為什么阿里巴巴要求日期格式化時(shí)必須有使用y表示年

    為什么阿里巴巴要求日期格式化時(shí)必須有使用y表示年

    這篇文章主要介紹了為什么阿里巴巴要求日期格式化時(shí)必須有使用y表示年,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 學(xué)習(xí)java多線程

    學(xué)習(xí)java多線程

    本文運(yùn)用了大量的代碼講解了java多線程,它可以提高程序并行執(zhí)行的速度,更快的響應(yīng)程序。感興趣的小伙伴一起來(lái)看看吧
    2021-08-08

最新評(píng)論