JVM內存模型與垃圾回收GC

Java開發有個很基礎的問題,雖然我們平時接觸的不多,但是了解它卻成為Java開發的必備基礎——這就是JVM。在C++中我們需要手動申請內存然后釋放內存,否則就會出現對象已經不再使用內存卻仍被占用的情況。在Java中JVM內置了垃圾回收的機制,幫助開發者承擔對象的創建和釋放的工作,極大的減輕了開發的負擔。那是不是我們就不需要了解JVM了,顯然在做一些優化或者深入研究應用性能的時候,JVM還是起了很關鍵的作用的。因此本篇就總結性的描述下JVM的內存模型與垃圾回收相關的知識。

本文的主要內容如下:

  • 內存模型
  • 垃圾回收
  • 參考文章

內存模型

各部分的功能

這幾個存儲區最主要的就是棧區和堆區,那么什么是棧什么是堆呢?說的簡單點,棧里面存放的是基本的數據類型和引用,而堆里面則是存放各種對象實例的。

堆與棧分開設計是為什么呢?

  • 棧存儲了處理邏輯、堆存儲了具體的數據,這樣隔離設計更為清晰
  • 堆與棧分離,使得堆可以被多個棧共享。
  • 棧保存了上下文的信息,因此只能向上增長;而堆是動態分配

棧的大小可以通過-XSs設置,如果不足的話,會引起java.lang.StackOverflowError的異常

棧區

線程私有,生命周期與線程相同。每個方法執行的時候都會創建一個棧幀(stack frame)用于存放 局部變量表、操作棧、動態鏈接、方法出口。

存放對象實例,所有的對象的內存都在這里分配。垃圾回收主要就是作用于這里的。

  • 堆得內存由-Xms指定,默認是物理內存的1/64;最大的內存由-Xmx指定,默認是物理內存的1/4。
  • 默認空余的堆內存小于40%時,就會增大,直到-Xmx設置的內存。具體的比例可以由-XX:MinHeapFreeRatio指定
  • 空余的內存大于70%時,就會減少內存,直到-Xms設置的大小。具體由-XX:MaxHeapFreeRatio指定。

因此一般都建議把這兩個參數設置成一樣大,可以避免JVM在不斷調整大小。

程序計數器

這里記錄了線程執行的字節碼的行號,在分支、循環、跳轉、異常、線程恢復等都依賴這個計數器。

方法區

類型信息、字段信息、方法信息、其他信息

總結

名稱特征作用配置異常
棧區線程私有,使用一段連續的內存空間存放局部變量表、操作棧、動態鏈接、方法出口-XSsStackOverflowError OutOfMemoryError
線程共享,生命周期與虛擬機相同保存對象實例-Xms -Xmx -XmnOutOfMemoryError
程序計數器線程私有、占用內存小字節碼行號
方法區線程共享存儲類加載信息、常量、靜態變量等-XX:PermSize -XX:MaxPermSizeOutOfMemoryError

垃圾回收

如何定義垃圾

有兩種方式,一種是引用計數(但是無法解決循環引用的問題);另一種就是可達性分析。

判斷對象可以回收的情況:

  • 顯示的把某個引用置位NULL或者指向別的對象
  • 局部引用指向的對象
  • 弱引用關聯的對象

垃圾回收的方法

Mark-Sweep標記-清除算法

這種方法優點就是減少停頓時間,但是缺點是會造成內存碎片。

Copying復制算法

這種方法不涉及到對象的刪除,只是把可用的對象從一個地方拷貝到另一個地方,因此適合大量對象回收的場景,比如新生代的回收。

Mark-Compact標記-整理算法

這種方法可以解決內存碎片問題,但是會增加停頓時間。

Generational Collection 分代收集

最后的這種方法是前面幾種的合體,即目前JVM主要采取的一種方法,思想就是把JVM分成不同的區域。每種區域使用不同的垃圾回收方法。

上面可以看到堆分成三個區域:

  • 新生代(Young Generation):用于存放新創建的對象,采用復制回收方法,如果在s0和s1之間復制一定次數后,轉移到年老代中。這里的垃圾回收叫做minor GC;
  • 年老代(Old Generation):這些對象垃圾回收的頻率較低,采用的標記整理方法,這里的垃圾回收叫做 major GC。
  • 永久代(Permanent Generation):存放Java本身的一些數據,當類不再使用時,也會被回收。

這里可以詳細的說一下新生代復制回收的算法流程:

在新生代中,分為三個區:Eden, from survivor, to survior。

  • 當觸發minor GC時,會先把Eden中存活的對象復制到to Survivor中;
  • 然后再看from survivor,如果次數達到年老代的標準,就復制到年老代中;如果沒有達到則復制到to survivor中,如果to survivor滿了,則復制到年老代中。
  • 然后調換from survivor 和 to survivor的名字,保證每次to survivor都是空的等待對象復制到那里的。

垃圾回收器

串行收集器 Serial

這種收集器就是以單線程的方式收集,垃圾回收的時候其他線程也不能工作。

并行收集器 Parallel

以多線程的方式進行收集

并發標記清除收集器 Concurrent Mark Sweep Collector, CMS

大致的流程為:初始標記--并發標記--重新標記--并發清除

G1收集器 Garbage First Collector

大致的流程為:初始標記--并發標記--最終標記--篩選回收

參考

轉載于:https://www.cnblogs.com/erma0-007/p/8655029.html

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

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

相關文章

Windows批處理命令學習

Windows批處理命令學習一 Windows的批處理命令固然比不上unix的shell腳本強大,但用好了仍能給我們的工作帶來很大作用。一個朋友問我為什么學習批處理命令,我以《程序員修煉之道——從小工到專家》一書的一句話答復他:圖形界面的優點是所見即…

介質控制訪問為什么不適用多路復用技術來解決沖突

因為使用頻分多路復用或者時分多路復用會增加延遲時間,同時信道利用率也比較低

CAE所表示的計算機術語是,計算機應用中,英文縮略語CAE所表示的計算機術語是()。...

_剛果紅染色可呈紅色陽性反應的疾病有()。當管流過水斷面流速按拋物線規律分布時,管中水流為紊流。一般含硫量較低的石油多產自碳酸鹽巖系和膏巖系含油層。轉移因子屬于免疫()劑,適用于()。某客戶在南京分行營業部開立的一卡通憑證失磁/損壞,…

第 11 章 Paragraphs

目錄 11.1. para11.2. simpara11.3. formalpara11.4. bridgehead11.5. blockquote11.6. sidebar11.7. TM 商標 11.8. epigraph 題詞11.9. Font Formatting Codes11.9.1. strong11.9.2. bold11.9.3. italic11.9.4. literal11.9.5. remark11.1. para <para>helloworld</…

傷疤好了有黑印怎么辦_春藤家長圈|家有二孩,老大老二一起搶東西,家長該怎么辦?...

本期主講&#xff1a;齊靜美國G.T.I.認證父母效能訓練師高級家庭教育指導師未來春藤家長學院特聘講師(西安)五年一線幼兒教學從業經驗兩個孩子的媽媽每周一次的春藤家長圈線上案例分享時間到啦&#xff01;本周是我們線上案例分享的第十四期&#xff01;本周案例&#xff1a;本…

Java_方法

方法就是將一段代碼封裝在一個結構體中&#xff0c;并且可反復調用 方法的定義&#xff1a; public static 返回值類型 方法名稱 &#xff08;[參數類型 變量&#xff0c; 參數類型 變量&#xff0c;參數類型 變量...]&#xff09;{ 方法中包含的代碼&#xff1b; [return 返回…

2011年度最佳代碼“不管你們信不信,我反正信了”

最近有段十分流行的代碼&#xff0c;是從江湖傳聞“身懷八蛋”的鐵道部發言人王勇平同志的一句名言&#xff1a;“不管你們信不信&#xff0c;我反正信了……這是生命的奇跡……它就是發生了”所引申出來的。這段代碼雖然只是在調侃&#xff0c;但是圍繞這段代碼也產生了一些討…

無錫計算機硬件培訓,無錫錫山辦公軟件電腦基礎培訓隨到隨學 學會為止

一、辦公 2個月WORD文字處理&#xff1b;EXCEL電子表格應用&#xff1b;PowerPoint動畫幻燈片制作&#xff1b;國際互聯網、電子郵件、網上傳真&#xff1b;軟件安裝、計算機維護、基礎、常用辦公硬件的使用(打印機、掃描儀、刻錄機、數碼相機等)從事行政、管理、文秘、銷售、…

以太網和局域網的關系

以太網 以太網是當今現有局域網采用的通用通信協議標準&#xff0c;組建于七十年代早期。Ethernet(以太網&#xff09;是一種傳輸速率為10Mbps的常用局域網&#xff08;LAN&#xff09;標準。在以太網中&#xff0c;所有計算機被連接一條同軸電纜上&#xff0c;采用具有沖突檢…

不懂卷積神經網絡?別怕,看完這幾張萌圖你就明白了

本文來自AI新媒體量子位&#xff08;QbitAI&#xff09;這篇文章用最簡明易懂的方式解釋了卷積神經網絡&#xff08;CNN&#xff09;的基本原理&#xff0c;并繞開了里面的數學理論。 同時&#xff0c;如果想對從頭開始構建CNN網絡之類的問題感興趣&#xff0c;作者推薦去讀《 …

xrd連續掃描和步進掃描_一種提高xrd實驗精度的方法

一種提高xrd實驗精度的方法【專利摘要】本發明公開了一種提高XRD實驗精度的方法&#xff0c;包括如下步驟&#xff1a;步驟1&#xff1a;將待測試樣進行處理至表面平整光潔&#xff1b;步驟2&#xff1a;選用步進掃描方式對待測鋼試樣進行XRD實驗&#xff0c;步進掃描方式的掃描…

2018雙一流排名 計算機,2018中國雙一流高校名單

目前全球范圍內&#xff0c;比較有影響力的世界大學排名包括《QS世界大學排名》、《世界大學學術排名(ARWU)》、《泰晤士高等教育世界大學排名》、《usnews世界大學排名》和CWUR沙特阿拉伯全球大學評級中心世界大學排名。這些排名從各個方面對世界范圍內的高校進行綜合排名&…

交換機和集線器的區別

集線器采用的是共享帶寬的工作方式&#xff0c;簡單打個比如&#xff0c;集線器就好比一條單行道&#xff0c;“10M”的帶寬分多個端口使用&#xff0c;當一個端口占用了大部分帶寬后&#xff0c;另外的端口就會顯得很慢。相反&#xff0c;交換機是一個獨享的通道&#xff0c;它…

移動平臺還有哪些創業機會

這是一個移動互聯網創業的最好時代。 過去的2011年&#xff0c;國內大批創業者為移動互聯網而瘋狂。這個超過200億元的市場牢牢吸引著他們&#xff0c;每天都有新鮮的主意轉化為應用。 移動互聯網時代的創業成本遠小于互聯網時代。創新工場創始人李開復在2011中國移動開發者大…

Swift封裝 滑出式導航欄

前言&#xff1a; 本文將會創建以下幾個主類&#xff1a; DWContainerViewController&#xff1a;這包含了左視圖&#xff0c;中視圖和右視圖控制器的視圖&#xff0c;并處理動畫和滑動等操作。 DWCenterViewController&#xff1a;中央面板。 DWSidePanelViewController&#…

廣東電網計算機專業筆試題目,廣東電網筆試題目

廣東電網筆試題目筆試是一種與面試對應的測試&#xff0c;是以填寫的方法考核應聘者學識水平的重要工具。這種方法可以有效的測量應聘人的基本知識、專業知識、管理知識、綜合分析能力和文字表達能力等素質及能力的差異。下面是小編為大家收集的廣東電網筆試題目&#xff0c;希…

波特率和比特率

波特率&#xff08;符號率&#xff09;&#xff0c;可以理解為傳輸介質實際能達到的電壓變化&#xff0c;比如每秒可以改變多少次。 比特率&#xff0c;是邏輯層面上每秒能傳輸多少個比特。 考慮最簡單的不歸零編碼&#xff0c;用5伏電壓表示1&#xff0c;-5伏電壓表示0&…

usart和uart 的區別

摘自:https://blog.csdn.net/meic51/article/details/7714847 什么是同步和異步 轉自https://blog.csdn.net/seashine_yan/article/details/71192283轉載于:https://www.cnblogs.com/chulin/p/8661720.html

蘋果產品開發的絕密工作流程

長期以來蘋果產品開發流程在很多方面都籠罩著一層神秘的面紗&#xff0c;而在AdamLashinsky新發行的《InsideApple:HowAmerica’sMostAdmired–andSecretive–CompanyReallyWorks》一書中對這些流程有所涉及。這本書同時談論了蘋果公司各個不同的方面&#xff0c;包括其理念、招…

Linux系統集群架構線上項目配置實戰(一)

項目整體介紹 **整個項目包括以下幾個應用工程** 1、 用戶APP 2、 商家APP 3、 業務平臺管理后臺 4、 商家業務管理后臺 5、 官網 **整體項目規劃設計如下** 1、 用戶APP采用JAVA環境布署&#xff0c;初始環境兩臺服務器&#xff0c;實現負載均衡與高可用&#xff0c;前端…