關於jvm的GC調優的做法

2021-07-15 03:13:47 字數 984 閱讀 9829

如果不能忍受full gc,預設設定也達不到你的期望值,並且應用停頓時間和你的目標不一致,那麼你需要對gc調優。

調優的基本想法如下:

1,能在新生eden區代**的資源,盡量不讓資源進入到survivor區。

2,能在survivor區**的資源,盡量不讓資源進入old區。

其實,我們的最終目的是盡量不讓太多資源進入old區,如果old區滿了的話,就會引發full gc,這是我們不想要的。

而當survivor區滿了的話,就會把不能釋放的資源放入到old區。

eden區存放物件時,也需要注意一些問題。如果存放的物件太大的話,可能會產生兩個問題:

1,無法放到堆的tlab區。

(eden,survivor和old都屬於堆,只是占用的比例不同。而tlab是eden區的一部分)

2,可能會直接放到survivor區或old區。

為什麼上面的兩點會是問題呢。

當乙個物件生成後,如果物件很快就用完,並想釋放掉的話,最好放到eden區,

因為每次gc時,都會把eden區的無用的資源清除掉,有用的放到survivor或old區。

這樣,一些很快用完的資源會被快速釋放掉。

但如果放到old區的話,每次gc時,不會清理old區,只有在old區滿了之後,才會清理,並壓縮

old區(壓縮的目的是減少磁碟碎片),也就是full gc。

所以,資源盡可能的放到eden區,除非這次資源會用很長時間。

為什麼無法放到堆的tlab區也是問題呢?

因為tlab區雖然也是堆上的一部分,但這部分的訪問速度非常快。

原理是這部分區域是執行緒私有的,不是執行緒共享的。

因為是私有的,所以訪問時,存在和其它執行緒搶占問題,也就不用加鎖來保證安全。

所以,如果資源能放在tlab裡,就盡量使資源放到tlab裡。

具體放到哪,是由物件的大小和tlab的大小或各種區域的塊大小決定的。

具體如何優化能讓資源放在我們設想的區域裡,以後再說。

磁碟碎片

JVM的GC機制及JVM的調優方法

記憶體管理和垃圾 是jvm非常關鍵的點,對j a效能的剖析而言,了解記憶體管理和垃圾 的基本策略非常重要。1.在程式執行過程當中,會建立大量的物件,這些物件,大部分是短週期的物件,小部分是長週期的物件,對於短週期的物件,需要頻繁地進行垃圾 以保證無用對 象盡早被釋放掉,對於長週期物件,則不需要頻率垃...

Jvm調優的方法

其實,jvm調優只要是指的記憶體管理方面的調優,包括各個代的大小,gc策若,由於gc動作會導致應用執行緒的掛起,嚴重影響效能,這些調優對於應用很重要,下面這些方法主要是為了盡量降低gc所導致的應用暫停時間的方法 一 代大小的調優。1 避免新生代大小設定的過小 主要是minorgc和fullgc的關係...

JVM的GC中物件的age以及JVM記憶體的分配策略

young generation中的gc叫minor gc,eden中的物件拷貝到s。old generation中的gc叫full gc。age,官方文件預設為15,age也相當於計數器,每次gc,age 1,age代表gc的次數。在gc時,s中的物件的age一樣的這批資料大於s空間1 2的話,此...