国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JVM內存分代、垃圾回收漫談

開發 前端
最近在看周志明老師的《深入理解 Java 虛擬機》一書,收獲頗多,以下為看完前半部分后的一些算是讀書筆記吧,結合書本內容,簡單記錄分享一下有關 JVM 內存分代以及垃圾回收相關的內容。

最近在看周志明老師的《深入理解 Java 虛擬機》一書,收獲頗多,以下為看完前半部分后的一些算是讀書筆記吧,結合書本內容,簡單記錄分享一下有關 JVM 內存分代以及垃圾回收相關的內容。

[[189490]]

JVM 內存區域

都知道 JVM 的內存區域分為5個部分,如果有疑惑,可以參看之前的一篇文章 -JVM 內存區域介紹。

這里也簡單羅列一下 JVM 的五部分

程序計數器

這是一塊較小的內存空間,它的作用可以看做是當前線程所執行的字節碼的行號指示器,線程私有。

Java 虛擬機棧

它是 Java方法執行的內存模型,每一個方法被調用到執行完成的過程,就對應著一個棧幀在虛擬機棧中從入棧到出棧的過程,線程私有。

本地方法棧

跟虛擬機棧類似,不過本地方法棧用于執行本地方法,線程私有。

Java 堆

該區域存在的唯一目的就是存放對象,幾乎應用中所有的對象實例都在這里分配內存,所有線程共享。

方法區

它用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據,所有線程共享。

有關 OOM

都知道,任何一個應用在啟動后,操作系統分配給它的內存一定是有限的,所以如何合理有效的管理內存,就變得尤為重要。

而從上節可知,我們一般討論的對象內存分配均發生在 Java 堆上。所以這里說的內存管理大部分情況下即指對 Java 堆內存。而程序計數器、虛擬機棧他們隨著線程生而生,亡而亡,所以他們內存相對比較好管理,出現的問題也比較少。

一個應用啟動后,不停運行,不停的執行命令,創建對象,而這些對象,大都存放在堆內存區域。這部分區域的大小是有限的,而需要生成的對象是無限的,當某一次創建對象時發現堆內存實在沒有空間可用來創建對象的時候,JVM 就會爆出 OutOfMemoryError 異常(后文統稱 OOM),程序就會掛掉。

上面只是說明了一下表象。其實 OOM 遠不是上面說的那么簡單。如果要理解 OOM,這里還有一些其他知識需要說明。

  • OOM 發生前其實 JVM 會進行內存的垃圾回收(GC)。
  • 垃圾回收有多種不同的實現算法。
  • 為了更好的管理內存,堆內存進行了分代。
  • 堆內存的新生代和老年代的垃圾回收算法不一致。

其實,這里的知識需要綜合理解,你才會對 OOM 有一個全面的認識。

內存分代

一個應用啟動,操作系統會給他分配一個初始的內存大小,由上可知,這部分內存大部分應該屬于堆內存,JVM 為了更好地利用管理這部分內存,對該區域做了劃分。一部分成為新生代,另一部分稱為老年代。

一開始對象的創建都發生在新生代,隨著對象的不斷創建,如果新生代沒有空間創建新對象,將會發生 GC ,這時的 GC 稱之為 Minor GC,位于新生代的對象每經過一次 Minor GC 后,如果這個對象沒有被回收,則為自己的標記數加1,這個標記數用于標識這個對象經歷了多少次的 Minor GC,對于 Sun 的 Hotspot 虛擬機,如果這個次數超過 15 ,該對象才會被移動到老年代。

隨著時間的推移,如果老年代也沒有足夠的空間容納對象,老年代也會試著發起 GC,這時的 GC 被稱為 Full GC。

相比 Minor GC,Full GC 發生的次數比較少,但是每發生一次 Full GC,整個堆內存區域都需要執行一次垃圾回收,這對程序性能造成的影響比 Minor GC 大很多。所以我們應該盡量避免或者減少 Full GC 的發生。

同時,在堆內存區域,發生最多的 GC 情形就是新生代的 Minor GC 了,因為所有的對象會優先去新生代開辟空間,所以這塊的內存變化會很快,只有內存不夠用,就會發生 GC,但是一般的 Minor GC 執行比 Full GC 快很多。為什么呢?因為新生代和老年代的垃圾回收算法不一樣。

垃圾回收算法

標記-清除算法(Mark-Sweep)

這是最基礎的收集算法,如它的名字一樣,算法分為“標記”和“清除”兩個階段:

首先標記出所有需要回收的對象,在標記完成后統一回收掉所有被標記的對象。

之所以說它是最基礎的收集算法,是因為后續的收集算法都是基于這種思路并對其缺點進行改進而得到的。

它的主要缺點有兩個:一個是效率問題,標記和清除過程的效率都不高;另外一個是空間問題,標記清除之后會產生大量不連續的內存碎片,空間碎片太多可能會導致,當程序在以后的運行過程中需要分配較大對象時無法找到足夠的連續內存而不得不提前觸發另一次垃圾收集動作。

復制算法(Copying)

為了解決效率問題,一種稱為“復制”(Copying)的收集算法出現了,它將可用內存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊的內存用完了,就將還存活著的對象復制到另外一塊上面,然后再把已使用過的內存空間一次清理掉。

這樣使得每次都是對其中的一塊進行內存回收,內存分配時也就不用考慮內存碎片等復雜情況,只要移動堆頂指針,按順序分配內存即可,實現簡單,運行高效。只是這種算法的代價是將內存縮小為原來的一半,未免太高了一點。

但是這種算法的效率相當高,所以,現在的商業虛擬機都采用這種收集算法來回收新生代。為什么新生代可以使用復制算法呢?

IBM 有專門研究表明,新生代中的對象 98% 都是朝生夕死,所以就不需要按照1:1的比例來劃分內存空間。這里鑒于此,新生代采用了如下的劃分策略。

現在把新生代再劃分為三部分,一塊較大的 Eden(伊甸園) 和兩塊較小的 Survivor(幸存者) 區域。

當回收時,將 Eden 和 Survivor 中還存活著的對象一次性地拷貝到另外一塊Survivor空間上,最后清理掉Eden和剛才用過的Survivor的空間。HotSpot 虛擬機默認Eden和Survivor的大小比例是8∶1,也就是每次新生代中可用內存空間為整個新生代容量的90%(80%+10%),只有10%的內存是會被“浪費”的。

這樣清理完成后,原來的 Survivor 就空了,并一直保持為空,直到下次 Minor GC 時,它再作為存活對象的盛放地。兩個 Survivor 就這樣輪流當做 GC 過程中新生代存活對象的中轉站。

但是,如果使用復制算法的內存區域有大量的存活對象時,復制算法就會變得捉襟見肘,這時需要更大的 Survivor 區用于盛放那些存活對象,甚至可能需要 1:1的比例。所以針對堆內存區域的老年代,就有了下面的算法。

標記-整理算法

標記過程仍然與“標記-清除”算法一樣,但后續步驟不是直接對可回收對象進行清理,而是 讓所有存活的對象都向一端移動,然后直接清理掉端邊界以外的內存 。這種方法避免了碎片的產生,同時也不需要一塊額外的內存空間,對于老年代會比較合適。

但是相比復制算法,雖然該算法占用的內存空間少,但是耗費的垃圾回收時間會比復制算法久,所以上面也說了

  • 我們應該盡量避免或者減少 Full GC 的發生。
  • 這兩種算法用精煉的語言描述就是
  • 復制算法:用空間換時間
  • 標記-整理算法:用時間換空間

一句話 魚與熊掌不可兼得,但是針對新生代和老年代,他們都是最佳的選擇。

總結

簡單梳理一下文中講到的一些知識點

  • 為了更好的管理堆內存,該區域分為新生代和老年代。
  • 新生代發生垃圾回收要比老年代頻繁。
  • 新生代發生的垃圾回收成為 Minor GC;老年代發生的 GC 成為 Full GC。
  • 為了更高效管理新生代的內存,按照復制算法,結合 IBM 的研究論證,新生代分為三塊,一塊比較大的 Eden 區和兩塊比較小的 Survivor 區,比例為 8:1:1

參考

《深入理解 Java 虛擬機》- 周志明老師

責任編輯:未麗燕 來源: 咕咚
相關推薦

2021-11-05 15:23:20

JVM回收算法

2010-09-27 09:01:26

JVM分代垃圾回收

2010-01-06 09:28:08

JVM分代垃圾回收

2012-01-10 11:19:35

JavaJVM

2011-12-05 12:51:58

JVMJava

2009-12-25 16:15:31

JVM垃圾回收算法

2010-01-14 11:28:54

JVM分代垃圾回收

2010-09-26 16:42:04

JVM內存組成JVM垃圾回收

2010-09-26 13:29:46

JVM垃圾回收

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2022-01-20 10:34:49

JVM垃圾回收算法

2023-08-08 10:29:55

JVM優化垃圾回收

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2010-09-25 15:33:19

JVM垃圾回收

2009-12-30 10:14:29

JVM垃圾回收

2022-06-22 09:54:45

JVM垃圾回收Java

2023-08-27 21:29:43

JVMFullGC調優

2012-01-10 14:25:36

JavaJVM

2023-12-19 21:52:51

Go垃圾回收開發

2021-08-13 08:15:23

JVM 虛擬機Java
點贊
收藏

51CTO技術棧公眾號

视频一区二区三区入口| 国产精品theporn88| 91色琪琪电影亚洲精品久久| 天天激情综合| 欧美区国产区| 精品福利一区二区三区| 日韩 欧美 高清| 欧美.com| 欧美一区三区四区| 北条麻妃69av| 国产日韩欧美一区| 国产精品乱码一区二区三区软件 | 亚洲视频一区在线| 欧美与欧洲交xxxx免费观看| 在线观看二区| 91麻豆精品秘密| 国产精品久久久久久久久久新婚 | 一区二区三区在线免费播放| 4k岛国日韩精品**专区| 米仓穗香在线观看| 人妖一区二区三区| 久久夜色撩人精品| 国产精品一区二区免费福利视频| 欧美日韩久久不卡| 春日野结衣av| 国产一区激情在线| 久久大大胆人体| 青青久久精品| 57pao成人永久免费视频| 夜色77av精品影院| 亚洲精品视频网上网址在线观看| 在线āv视频| 亚洲精品一区久久久久久| 成人精品3d动漫| 一区二区三区四区蜜桃| 91国内精品在线视频| 色综合天天综合在线视频| 里番在线观看网站| 精品99999| 草莓视频一区二区三区| 国产成人91久久精品| 成人在线中文| 色妞一区二区三区| 欧美日韩一二三四| 亚洲精品中字| 亚洲激情网站免费观看| av资源网站在线观看| 久久精品电影一区二区| 精品国产中文字幕第一页| 国产一区二区成人| 你懂的一区二区| 国产在线精品一区| 亚洲视频一二区| 韩国av网站在线| 国产91成人在在线播放| 99精品99| 日本xxxxxx| 国产香蕉精品视频一区二区三区| 99精品美女| 无码aⅴ精品一区二区三区浪潮| 色88888久久久久久影院野外| 最近中文字幕mv2018在线高清| 亚洲欧洲激情在线| 美日韩一级片在线观看| 亚洲52av| 国产精品免费久久久久久| 国产一区二区在线影院| 成人h小游戏| 999热视频| 91国偷自产一区二区三区观看| 欧美爱爱网站| 日韩电影免费观看在| 8x8x8国产精品| 日本肉肉一区| 夜夜爽www精品| 国产欧美日韩综合精品一区二区| 91精品论坛| www.avtt| 欧美日本中文字幕| av亚洲精华国产精华精| 日韩三级影视| 五月婷婷综合色| 精品国产一区二区三区久久久蜜月| 99精品国产在热久久婷婷| 亚洲成人精品一区二区三区| 精品久久久久久综合日本欧美| 亚洲精品乱码| 黄色免费网址大全| 欧美精品电影免费在线观看 | 欧美裸体网站| 日韩欧美国产wwwww| 久久中文字幕一区二区三区| 久草在线视频福利| 亚洲国产精品女人| 美日韩精品免费视频| 国产精品123| 激情av综合| 天堂影视av| 大波视频国产精品久久| 亚洲国产精品小视频| 97久久人人超碰| 99久久影视| 久草免费在线视频| 3d动漫精品啪啪一区二区三区免费| 99久久综合国产精品二区| 成人永久免费| 国产亚洲精品美女| 亚洲福利国产精品| 国产一区二区伦理| 嗯用力啊快一点好舒服小柔久久| 女人天堂在线| caoporn国产精品免费公开| 亚洲精美色品网站| 国产精品女上位| 亚洲国产一区二区三区a毛片| 国产精品一品| 国产超碰在线观看| 日韩精品一区二区免费| 久久99久久精品国产| 欧美日韩高清不卡| 日本在线一区二区三区| 欧美日韩一区在线视频| 国产精品高潮呻吟久久| 秋霞午夜在线观看| 国产精品第七影院| 欧美成人亚洲| 日本福利片高清在线观看| 色av中文字幕一区| 成人avav影音| 在线手机中文字幕| 中文字幕在线资源| 欧美日本不卡视频| av在线不卡免费看| 成人激情视频| 日韩av免费| 国产激情在线播放| 成人免费福利在线| 美女少妇精品视频| 久久综合伊人77777蜜臀| 欧洲国内综合视频| 中文字幕欧美激情| 在线天堂资源| 宅男噜噜噜66国产免费观看| 成人一区二区电影| 欧美国产乱视频| 色妞久久福利网| 亚洲激情男女视频| 99视频精品免费视频| 亚洲午夜久久| 国产中文欧美日韩在线| 成人国产激情| 欧美日韩一区二区三区四区不卡| 女女色综合影院| 成人频在线观看| 黄色av网站在线观看| 男人午夜天堂| 91福利在线视频| 玖草视频在线| 日本美女高清在线观看免费| 日韩有码免费视频| 国产精品午夜久久久久久| 18禁免费观看网站| 农村寡妇一区二区三区| 亚洲精品久久久久久久蜜桃臀| 成人羞羞视频免费| 国产成人久久| 午夜久久久久久电影| 欧美日韩性在线观看| 亚洲永久精品免费| 99视频资源网| 精品视频第一区| 51午夜精品视频| 日韩精品免费在线播放| 欧美日韩国产首页| 亚洲曰韩产成在线| 日本一区二区三区高清不卡| 久久69av| 亚洲ab电影| 玖玖精品视频| 国产乱子伦视频一区二区三区| 久久精品女人天堂| 国产在线乱码一区二区三区| 九色porny丨国产精品| 久久草av在线| av电影天堂一区二区在线| 99精品国产99久久久久久白柏 | 欧美性猛交久久久乱大交小说| 日本中文字幕不卡免费| 国产97在线亚洲| 久久久国产一区| 福利精品视频在线| 激情图区综合网| 精品99视频| 国产精品 日产精品 欧美精品| 久久久美女毛片| 99在线精品免费| 中文字幕第一区| 国产精品99久久久久久董美香| 日本激情视频在线播放| 色欧美激情视频在线|