JAVA面試_進階部分_Java JVM:垃圾回收(GC 在什么時候,對什么東西,做了什么事情)

在什么時候:

首先需要知道,GC又分為minor GC 和 Full GC(major GC)。Java堆內存分為新生代和老年代,新生代

中又分為1個eden區和兩個Survior區域。

一般情況下,新創建的對象都會被分配到eden區,這些對象經過一個minor gc后仍然存活將會被移動到

Survior區域中,對象在Survior中沒熬過一個Minor GC,年齡就會增加一歲,當他的年齡到達一定程度時,

就會被移動到老年代中。

當eden區滿時,還存活的對象將被復制到survior區,當一個survior區滿時,此區域的存活對象將被復制到另外一個

survior區,當另外一個也滿了的時候,從前一個Survior區復制過來的并且此時還存活的對象,將可能被復制到老年代

因為年輕代中的對象基本都是朝生夕死(80%以上),所以年輕代的垃圾回收算法使用的是復制算法,

復制算法的基本思想是將內存分為兩塊,每次只有其中一塊,當這一塊內存使用完,就將還活著的對象復制到

另一塊上面。復制算法不會產生內存碎片。

在GC開始的時候,對象只會存在于eden區,和名為“From”的Survior區,Survior區“to”是空的。緊接著GC

eden區中所有存活的對象都會被復制到“To”,而在from區中,仍存活的對象會根據他們的年齡值來決定去向,

年齡到達一定只的對象會被復制到老年代,沒有到達的對象會被復制到to survior中,經過這次gc后,eden區和from

survior區已經被清空。這個時候,from和to會交換他們的角色,也就是新的to就是上次GC前的from

Minor GC:從年輕代回收內存

當jvm無法為一個新的對象分配空間時會觸發Minor GC,比如當Eden區滿了。

當內存池被填滿的時候,其中的內容全部會被復制,指針會從0開始跟蹤空閑內存。Eden和Survior區不存在內存碎片

寫指針總是停留在所使用內存池的頂部。執行minor操作時不會影響到永久代,從永久帶到年輕代的引用被當成

GC roots,從年輕代到永久代的引用在標記階段被直接忽略掉(永久代用來存放java的類信息)。如果eden區域中大部分

對象被認為是垃圾,永遠也不會復制到Survior區域或者老年代空間。如果正好相反,eden區域大部分新生對象不符合GC

條件,Minor GC執行時暫停的線程時間將會長很多。Minor may call “stop the world”;

Full GC:是清理整個堆空間包括年輕代和老年代。

那么對于Minor GC的觸發條件:大多數情況下,直接在eden區中進行分配。如果eden區域沒有足夠的空間,

那么就會發起一次Minor GC;對于FullGC的觸發條件:如果老年代沒有足夠的空間,那么就會進行一次FullGC

在發生MinorGC之前,虛擬機會先檢查老年代最大可利用的連續空間是否大于新生代所有對象的總空間。

如果大于則進行Minor GC,如果小于則看HandlePromotionFailure設置是否是允許擔保失敗(不允許則直接FullGC)

如果允許,那么會繼續檢查老年代最大可利用的連續空間是否大于歷次晉升到老年代對象的平均大小,如果大于

則嘗試minor gc (如果嘗試失敗也會觸發Full GC),如果小于則進行Full GC。

但是,具體什么時候執行,這個是由系統來進行決定的,是無法預測的。

對什么東西:

主要根據可達性分析算法,如果一個對象不可達,那么就是可以回收的,如果一個對象可達,那么這個對象就不可以回收,

對于可達性分析算法,它是通過一系列稱為“GC Roots”的對象最為起始點,當一個對象GC Roots沒有任何引用鏈相接的時候,

那么這個對象就是不可達,就可以被回收。

做了什么事情:

主要做了清理對象,整理內存的工作。Java堆分為新生代和老年代,采用了不同的回收方式。

例如新生代采用了復制算法,老年代采用了標記整理法。在新生代中,分為一個ede區域和兩個Survior

區域,真正使用的是一個eden區域,和一個Survior區域,GC的時候,會把存活的對象放入到另一個Survior區域中,

然后再把這個eden區域和Survior區域清除。那么對于老年代,采用的是標記整理發,首先標記出存活對象,

然后在移動到一段。這樣有利于減少內存碎片。

標記:標記的過程其實就是,遍歷所有gc root 然后將所有gc root 可達的對象標記為存活對象

清除:清除的過程中將遍歷堆中所有的對象,將沒有標記的對象全部清除掉

主要缺點:標記和清除過程效率不高,標記清除之后會產生大量不連續的內存碎片

但是,老年代中因為對象存活率高,沒有額外空間對他進行分配擔保,就必須使用標記整理算法

標記整理算法 標記操作和“標記-清除”算法一致,后續操作不只是直接清理對象,而是在清理

無用對象完成后讓所有存活的對象都向一段移動,并更新其引用對象的指針

主要缺點:在標記清除的基礎上還需要進行對象的移動,成本相對比較高,成本相對較高,好處是不會產生內存碎片。

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

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

相關文章

2024年消費者權益數據分析

📅 2024年315消費者權益數據分析 數據見:https://mp.weixin.qq.com/s/eV5GoionxhGpw7PunhOVnQ 一、引言 在數字化時代,消費者維權數據對于市場監管、商家誠信和行業發展具有重要價值。本文基于 2024年315平臺線上投訴數據,采用數…

設計模式Python版 訪問者模式

文章目錄 前言一、訪問者模式二、訪問者模式示例 前言 GOF設計模式分三大類: 創建型模式:關注對象的創建過程,包括單例模式、簡單工廠模式、工廠方法模式、抽象工廠模式、原型模式和建造者模式。結構型模式:關注類和對象之間的組…

安全無事故連續天數計算,python 時間工具的高效利用

安全天數計算,數據系統時間直取,安全標準高效便捷好用。 筆記模板由python腳本于2025-03-17 23:50:52創建,本篇筆記適合對python時間工具有研究欲的coder翻閱。 【學習的細節是歡悅的歷程】 博客的核心價值:在于輸出思考與經驗&am…

大型語言模型(LLM)部署中的內存消耗計算

在部署大型語言模型(LLM)時,顯存(VRAM)的合理規劃是決定模型能否高效運行的核心問題。本文將通過詳細的公式推導和示例計算,系統解析模型權重、鍵值緩存(KV Cache)、激活內存及額外開…

Mysql表的查詢

一:創建一個新的數據庫(companydb),并查看數據庫。 二:使用該數據庫,并創建表worker。 mysql> use companydb;mysql> CREATE TABLE worker(-> 部門號 INT(11) NOT NULL,-> 職工號 INT(11) NOT NULL,-> 工作時間 D…

ASP.NET Webform和ASP.NET MVC 后臺開發 大概80%常用技術

本文涉及ASP.NET Webform和ASP.NET MVC 后臺開發大概80%技術 2019年以前對標 深圳22K左右 廣州18K左右 武漢16K左右 那么有人問了2019年以后的呢? 答:吉祥三寶。。。 So 想繼續看下文的 得有自己的獨立判斷能力。 C#.NET高級筆試題 架構 優化 性能提…

首頁性能優化

首頁性能提升是前端優化中的核心任務之一,因為首頁是用戶訪問的第一入口,其加載速度和交互體驗直接影響用戶的留存率和轉化率。 1. 性能瓶頸分析 在優化之前,首先需要通過工具分析首頁的性能瓶頸。常用的工具包括: Chrome DevTo…

一周學會Flask3 Python Web開發-SQLAlchemy刪除數據操作-班級模塊

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程&#xff1a; 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 首頁list.html里加上刪除鏈接&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta c…

改變一生的思維模型【12】笛卡爾思維模型

目錄 基本結構 警惕認知暗礁 案例分析應用 一、懷疑階段:破除慣性認知 二、解析階段:拆解問題為最小單元 三、整合階段:重構邏輯鏈條 四、檢驗階段:多維驗證解決方案 總結與啟示 笛卡爾說,唯獨自己的思考是可以相信的。 世界上所有的事情,都是值得被懷疑的,但是…

需求文檔(PRD,Product Requirement Document)的基本要求和案例參考:功能清單、流程圖、原型圖、邏輯能力和表達能力

文章目錄 引言I 需求文檔的基本要求結構清晰內容完整語言準確圖文結合版本管理II 需求文檔案例參考案例1:電商平臺“商品中心”功能需求(簡化版)案例2:教育類APP“記憶寶盒”非功能需求**案例3:軟件項目的功能需求模板3.1 功能需求III 需求文檔撰寫技巧1. **從核心邏輯出發…

五大方向全面對比 IoTDB 與 OpenTSDB

對比系列第三彈&#xff0c;詳解 IoTDB VS OpenTSDB&#xff01; 之前&#xff0c;我們已經深入探討了時序數據庫 Apache IoTDB 與 InfluxDB、Apache HBase 在架構設計、性能和功能方面等多個維度的區別。還沒看過的小伙伴可以點擊閱讀&#xff1a; Apache IoTDB vs InfluxDB 開…

Electron使用WebAssembly實現CRC-16 MAXIM校驗

Electron使用WebAssembly實現CRC-16 MAXIM校驗 將C/C語言代碼&#xff0c;經由WebAssembly編譯為庫函數&#xff0c;可以在JS語言環境進行調用。這里介紹在Electron工具環境使用WebAssembly調用CRC-16 MAXIM格式校驗的方式。 CRC-16 MAXIM校驗函數WebAssembly源文件 C語言實…

vue3vue-elementPlus-admin框架中form組件的upload寫法

dialog中write組件代碼 let ImageList reactive<UploadFile[]>([])const formSchema reactive<FormSchema[]>([{field: ImageFiles,label: 現場圖片,component: Upload,colProps: { span: 24 },componentProps: {limit: 5,action: PATH_URL /upload,headers: {…

Linux mount和SSD分區

為什么要用 mount&#xff1f; Linux 的文件系統結構是單一的樹狀層次 所有文件、目錄和設備都從根目錄 / 開始延伸。 外部的存儲設備&#xff08;如硬盤、U盤、網絡存儲&#xff09;或虛擬文件系統&#xff08;如 /proc、/sys&#xff09;必須通過掛載點“嫁接”到這棵樹上&a…

【Function】Azure Function通過托管身份或訪問令牌連接Azure SQL數據庫

【Function】Azure Function通過托管身份或訪問令牌連接Azure SQL數據庫 推薦超級課程: 本地離線DeepSeek AI方案部署實戰教程【完全版】Docker快速入門到精通Kubernetes入門到大師通關課AWS云服務快速入門實戰目錄 【Function】Azure Function通過托管身份或訪問令牌連接Azu…

舉例說明 牛頓法 Hessian 矩陣

矩陣求逆的方法及示例 目錄 矩陣求逆的方法及示例1. 伴隨矩陣法2. 初等行變換法矩陣逆的實際意義1. 求解線性方程組2. 線性變換的逆操作3. 數據分析和機器學習4. 優化問題牛頓法原理解釋舉例說明 牛頓法 Hessian 矩陣1. 伴隨矩陣法 原理:對于一個 n n n 階方陣 A A

安科瑞分布式光伏監測系統:推動綠色能源高效發展

安科瑞顧強 為應對傳統能源污染與資源短缺&#xff0c;分布式光伏發電成為關鍵解決方案。安科瑞Acrel-1000DP分布式光伏監控系統結合光功率預測技術&#xff0c;有效提升發電穩定性&#xff0c;助力上海汽車變速器有限公司8.3MW屋頂光伏項目實現清潔能源高效利用。 項目亮點 …

從零開始使用 **Taki + Node.js** 實現動態網頁轉靜態網站的完整代碼方案

以下是從零開始使用 Taki Node.js 實現動態網頁轉靜態網站的完整代碼方案&#xff0c;包含預渲染、自動化構建、靜態托管及優化功能&#xff1a; 一、環境準備 1. 初始化項目 mkdir static-site && cd static-site npm init -y2. 安裝依賴 npm install taki expre…

商業智能BI分析中,汽車4S銷售行業的返廠頻次有什么分析價值?

買過車的朋友會發現&#xff0c;同一款車不管在哪個4S店去買&#xff0c;基本上價格都相差不大。即使有些差別&#xff0c;也是帶著附加條件的&#xff0c;比如要做些加裝需要額外再付一下費用。為什么汽車4S銷售行業需要商業智能BI&#xff1f;就是因為在汽車4S銷售行業&#…

靜態鏈接過程發生了什么?

在靜態鏈接過程中主要發生了兩件事。一是空間與地址分配&#xff0c;鏈接器掃描所有輸入文件的段&#xff0c;合并相似段并且重新計算段長度和在虛擬內存中的映射關系&#xff0c;收集所有的符號放到全局符號表中。二是符號解析與重定位&#xff0c;鏈接器收集所有的段信息和重…