JVM系列之Trace跟蹤GC(一)

2021-07-24 01:56:38 字數 1409 閱讀 1336

首先,我們需要創造乙個gc**的條件,正常而言,還真難創造出來。所以,我們必須借助jvm啟動引數。無容置疑,堆空間大小的引數無非就是xms和xmx。

xms:jvm堆空間初始大小,這不是我們想要的;

xmx:jvm最大堆空間,這個才是我們需要的;

注:xmx引數不宜過小,過小的堆空間會導致jvm無法啟動,極限可能和hotspot版本(包括32位和64位版本虛擬機器應該也有差異)也有關係,這不是重點,好奇看了下,4mb不能啟動,5mb能夠正常啟動(xmx單位可以是k,也可以是m,g當然也沒有問題);

jvm引數:

-xmx5m

-verbose:gc

測試程式,main方法:

public class mytest 

}}

user類:

public class user 

public user(long userid)

public long getuserid()

public void setuserid(long userid)

控制台輸出日誌:

[gc (allocation failure)  1024k->716k(5632k), 0.0012091 secs]

[gc (allocation failure) 1740k->1029k(5632k), 0.0007267 secs]

[gc (allocation failure) 2053k->1170k(5632k), 0.0007735 secs]

[gc (allocation failure) 2194k->1200k(5632k), 0.0005760 secs]

[gc (allocation failure) 2224k->1224k(5632k), 0.0006019 secs]

[gc (allocation failure) 2248k->1210k(5632k), 0.0005354 secs]

[gc (allocation failure) 2234k->1314k(5632k), 0.0006154 secs]

[gc (allocation failure) 2338k->1386k(5632k), 0.0003917 secs]

根據控制台資訊,我們得知,一共進行了8次gc操作,我們以第一次gc為樣本說下。

1024k:gc前,物件所佔堆空間的大小;

716k:gc後,物件所佔堆空間大小;

5632k:堆空間總大小,至於為什麼不是我指定的1024*5=5120k,可以關注本系列後序更新。

0.0012091 secs:本次gc操作耗時,這個比較容易理解

jvm系列文章之jvm 記憶體模型

1.jvm記憶體模型按照執行緒私有與否劃分為兩類,執行緒私有類記憶體 執行緒棧,程式計數器,本地方法棧 和執行緒共享記憶體 堆,方法區or元空間 兩大類 執行緒棧 當類開始執行main方法後,位元組碼執行引擎就會為當前執行緒分配一塊記憶體區域,該區域詳細又可以根據執行的方法為main方法的後續方法分...

Trace 如何跟蹤某個Job的開銷

下面是從以往profiler收集的跟蹤檔案中提取job有關資料 with cte as select b.name eventclass,textdata,databasename,duration 1000 duration ms row number by cpu desc rankid fro...

JVM系列 1 變數

這段時間一直在看jvm相關的書籍,雖然有點難,至少到目前為止還沒有放棄。寫這篇文章的目的 當做自己這段時間學習的小回顧。本章主要通過幾個 片段,分析下區域性變數表與運算元棧之間的資料傳遞關係,重點講解iload,istore,iconst iadd命令 public void test1 publi...