JVM的新生代、老年代、MinorGC、MajorGC

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

參考:

http://blog.csdn.net/flamezyg/article/details/44673951

http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html

http://www.360doc.com/content/12/1023/16/9615799_243296263.shtml

???

??? JVM中的堆,一般分為三大部分:新生代、老年代、永久代:

??? 一:新生代:主要是用來存放新生的對象。一般占據堆的1/3空間。由于頻繁創建對象,所以新生代會頻繁觸發MinorGC進行垃圾回收。

???????? 新生代又分為 Eden區、ServivorFrom、ServivorTo三個區。

???????? Eden區:Java新對象的出生地(如果新創建的對象占用內存很大,則直接分配到老年代)。當Eden區內存不夠的時候就會觸發MinorGC,對新生代區進行一次垃圾回收。

???????? ServivorTo:保留了一次MinorGC過程中的幸存者。

???????? ServivorFrom:上一次GC的幸存者,作為這一次GC的被掃描者。

???????? MinorGC的過程:MinorGC采用復制算法。首先,把Eden和ServivorFrom區域中存活的對象復制到ServicorTo區域(如果有對象的年齡以及達到了老年的標準,則賦值到老年代區),同時把這些對象的年齡+1(如果ServicorTo不夠位置了就放到老年區);然后,清空Eden和ServicorFrom中的對象;最后,ServicorTo和ServicorFrom互換,原ServicorTo成為下一次GC時的ServicorFrom區。

????

?

?

??? 二:老年代:主要存放應用程序中生命周期長的內存對象。

??? 老年代的對象比較穩定,所以MajorGC不會頻繁執行。在進行MajorGC前一般都先進行了一次MinorGC,使得有新生代的對象晉身入老年代,導致空間不夠用時才觸發。當無法找到足夠大的連續空間分配給新創建的較大對象時也會提前觸發一次MajorGC進行垃圾回收騰出空間。

??? MajorGC采用標記—清除算法:首先掃描一次所有老年代,標記出存活的對象,然后回收沒有標記的對象。MajorGC的耗時比較長,因為要掃描再回收。MajorGC會產生內存碎片,為了減少內存損耗,我們一般需要進行合并或者標記出來方便下次直接分配。

???? 當老年代也滿了裝不下的時候,就會拋出OOM(Out of Memory)異常。

?

?

??? 三:永久代

????指內存的永久保存區域,主要存放Class和Meta(元數據)的信息,Class在被加載的時候被放入永久區域. 它和和存放實例的區域不同,GC不會在主程序運行期對永久區域進行清理。所以這也導致了永久代的區域會隨著加載的Class的增多而脹滿,最終拋出OOM異常。

??? 在Java8中,永久代已經被移除,被一個稱為“元數據區”(元空間)的區域所取代。

??? 元空間的本質和永久代類似,都是對JVM規范中方法區的實現。不過元空間與永久代之間最大的區別在于:元空間并不在虛擬機中,而是使用本地內存。因此,默認情況下,元空間的大小僅受本地內存限制。類的元數據放入 native memory, 字符串池和類的靜態變量放入java堆中. 這樣可以加載多少類的元數據就不再由MaxPermSize控制, 而由系統的實際可用空間來控制.

??? 采用元空間而不用永久代的幾點原因:(參考:http://www.cnblogs.com/paddix/p/5309550.html)

  1、為了解決永久代的OOM問題,元數據和class對象存在永久代中,容易出現性能問題和內存溢出。

  2、類及方法的信息等比較難確定其大小,因此對于永久代的大小指定比較困難,太小容易出現永久代溢出,太大則容易導致老年代溢出(因為堆空間有限,此消彼長)。

  3、永久代會為 GC 帶來不必要的復雜度,并且回收效率偏低。

  4、Oracle 可能會將HotSpot 與 JRockit 合二為一。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447517.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447517.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447517.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Bash腳本:怎樣一行行地讀文件(最好和最壞的方法)

用bash腳本讀文件的方法有很多。請看第一部分,我使用了while循環及其后的管道命令(|)(cat $FILE | while read line; do … ),并在循環當中遞增 i 的值,最后,我得到了非我所想的 i 。主要的原因是&#xff…

解決:無法獲取實體類com.xxx.xx.xx.xx.dto.XxxDTO對應的表名

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1.報錯如題: 無法獲取實體類com.xxx.xx.xx.xx.dto.XxxDTO對應的表名 2. 報錯原因,如下圖紅框中部分&#xff0c…

IDEA 查看最近修改、已提交文件

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 如圖:點擊 Version Control --> Repository --> 最左邊藍色圓圈 --> 選擇一條提交日志:右邊就…

程序員賺錢致富的6種方法

我認識一個朋友,也是程序員出身,他在一家還不錯的外企上班,每個月工資收入也就差不多15K,五年的工作經驗了,在他面前,我算是小弟。那天我們幾個朋友一起打完球就去附近的飯館吃飯,環境還不錯&am…

解決:Changes not staged for commit:

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. git push 報錯: 2. 提交時加上參數:-a ,表示新增。 git commit -am "提交說明" 提交成…

內存不足:殺死進程還是犧牲子進程

早上6點,我不得不開始處理“叫醒”我的一些問題。因為當這些問題發生的時候,我的手機鈴聲響了。昏睡中的我非常不情愿地拿起了手機,檢查我是否瘋狂到將叫醒鬧鐘設在了早上5點。原來是監控系統發現一個Plumbr服務死掉了。 作為一名該領域經驗…

java8 注解: @FunctionalInterface (函數式接口)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Java8提倡函數式編程,因而新增了一個函數式接口。函數式接口保證了函數式編程,同時也保證了能夠兼容以前的java版…

寫給年輕程序員的一封信

很多年輕的程序員發emails給我,說希望能夠得到一些如何盡快躋身優秀程序員行列的建議和方法。關于這個問題,我已經有提到過很多次,現在已經沒什么可以補充的了。不過 為了滿足大家的要求,在這里我再詳細地歸納總結一下&#xff1a…

Docker中RocketMQ的安裝與使用

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 搜索RocketMQ的鏡像,可以通過docker的hub.docker.com上進行搜索,也可以在Linux下通過docker的search命令進行搜索…

大浪淘沙:不是所有的IT公司都以成功收場

本文列舉了50家創業公司沒有什么先后順序,最后顯示,其中21家是獨立公司,19家被收購了,4家正在走下坡路,6家已倒閉。但是我希望有更多的公司徹底倒閉,留下實力最強大的公司。公司倒閉也許是重新開始的標志。…

解決:阿里云ECS服務器 遠程連接不上、極慢 (主機監控的實現)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 個人低配版的阿里云ECS服務器,突然發現用 Xshell 或者 git-bash 都連接不上... 第一反應發工單去問下為什么,然…

TIOBE 2014年7月編程語言排行榜:僅發布1月,Swift進Top 20!

摘要:TIOBE7月編程語言排行榜發布,本月最值得關注的是,蘋果公司在WWDC 2014上推出新的編程語言Swift,發布至今僅一月有余,Swift竟擠進TIOBE排行榜的Top 20,排名第16位。Swift能取得如此驕人的成績&#xff…

Math對象方法總結(向上取整、向下取整、四舍五入、取隨機數,取最大值、取最小值)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

Docker 方式安裝 gitlab ( 阿里云ECS )

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1.查找鏡像: docker search gitlab 2. 拉取鏡像: docker pull 鏡像名 我選擇的是搜索出來的第一個鏡像&…

商用的碼流分析工具/YUV viewer

目前市場上有一些商用的碼流分析工具是比較好的,能夠輔助我們進行各個標準的碼流分析: 1. Elecard StreamEye系列 可以分析H264/MPEG4/MPEG2的碼流,暫時不支持其它標準。 2. H264VISA 比較好的H264碼流分析工具 3. Vegas vegas是interra s…

生成多個 SSH-Key 、生成多個公鑰和私鑰

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 當有多個倉庫要同時使用時,需要配置多個公鑰、私鑰。于是就要先生成多個。 PS:初次生成參見文章:查…

使用Lucid Virtu在有獨立顯卡的情況下使用Intel硬件加速H.264編碼

在硬編碼領域,大家都知道CUDA技術對于H.264視頻編碼速度的提升。然而實際上常見的高清H.264視頻壓縮都不是用CUDA技術進行硬編碼,而是用傳統的x264進行軟編碼,因為通過CUDA硬編碼的視頻效果遠遠差于x264軟編碼壓縮出的視頻效果。隨著Intel Sa…

執行ssh-add時出現Could not open a connection to your authentication agent

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 若執行ssh-add /path/to/xxx.pem是出現這個錯誤:Could not open a connection to your authentication agent,則先執行如下命…

Intel硬件加速 VS CUDA完勝 視頻轉碼感受

對比試用平臺介紹 在體驗了酷睿 I5 2300 在3D游戲和多任務、高清播放等方面的突出性能后,今天我利用空閑時間針對酷睿 I5 2300在高清轉碼方面上與本人的舊平臺上對比了一下.,其結果也讓人感到震撼。好了閑話不多說了,先來給自己新舊PC做個介紹…

解決 : Shell 腳本 $‘\r‘: command not found 問題

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1.經查證,只是 Windows 的空行在 linux 中不識別,故需要用 dos2unix 來轉換。 2. 安裝 dos2unix,2 …