JVM調優(yōu)

JVM內存結構

image.png
image.png

每起一個線程,都會在棧內存中開辟一塊專屬于該線程的空間,該線程每調用一個方法就會啟動一個棧幀

方法區(qū)在JDK8中改名叫永久區(qū),存放Class文件,靜態(tài)變量,常量,常量池等。

堆內存

image.png

大小比例: eden:s1:s2 = 8:1:1 ,new:old = 1:3 或者 3: 8
這些比例可以配置的

  1. 新創(chuàng)建(new)的對象如果特別大,則直接放入老年代區(qū)(tenured),否則放入eden區(qū)
  2. 當進行gc時,將eden區(qū)和s1中的垃圾清理后,將s1整個復制到s2中,eden區(qū)存活的對象也復制到s2;下次gc時進行清理后,將s2整個復制到s1,并且eden區(qū)存活的對象復制到s2,如此反復
  3. 若有對象一直在s1和s2中反復移動,到達一定次數后,則從新生代移動到老年代

對象的分配

image.png

對象分配的過程:

  1. 創(chuàng)建對象時,若對象很小,則直接在分配在線程的??臻g的棧幀中(方法調用),好處是當方法結束或線程結束,則對象的內存可直接回收,不需要垃圾收集器進行回收
  2. 若線程棧幀中分配不下,則會在線程本地緩存分配,即TLAB
  3. 若線程本地緩存放不下,且對象特別大,則放入老年代,否則放入eden區(qū)

垃圾

image.png

Java采用正向可達的算法

image.png
image.png
image.png
image.png
image.png

新生代采用復制算法:存活對象少,效率高
老年代采用標記壓縮算法:

  • 每次gc時產生的垃圾比較少
  • 標記壓縮后,保證沒有內存碎片,可以存放大對象

JVM參數

image.png
image.png
image.png
image.png
image.png

垃圾收集器

image.png
  • Serial Collector 一般不用
  • Parallel Collector JDK8默認的收集器,多處理器并行進行垃圾回收,但是停頓時間長,可能會達到1秒或更長, -XX:+UseParallelGC
  • CMS Collector 采用并發(fā)進行垃圾回收,響應快,停頓時間短,-XX:UseConMarkSweepGC
  • G1 采用并發(fā)進行垃圾回收,響應快,不僅停頓時間短,并發(fā)大,停頓時間比CMS略長,-XX:UseG1GC
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容