JVM堆內存的結構,YGC,FGC的原理

JVM堆內存結構:
JVM堆內存可分為三個區域:新生代(Young Generation)、年老代(Tenured Generation,也叫做Old Generation)和永久代(Permanent Generation,也叫做Method Area)。其中,新生代又分為一個Eden區和兩個Survivor區。

Eden區:是新生代中對象最初被創建的地方。當新創建一個Java對象時,該對象會被分配在Eden區。如果Eden區無法容納新創建的Java對象,就會觸發一次Minor GC(年輕代垃圾收集),將Eden區和Survivor區中沒有被引用的對象清除,而仍存活的對象則會被移至Survivor區。

Survivor區:當Java對象在Eden區中經過一次Minor GC后,如果在Survivor區中已經存在一份相同的對象,就會將該對象復制到Survivor區,同時更新該對象的引用計數器。Survivor區是一塊大小較小的區域,通常分為兩個大小相等的區域。每次Minor GC后,Survivor區中存活的Java對象都會被復制到另一個空區,同時清空這個區域。Survivor區的主要作用是存放年輕代中從Eden區中被復制過來的存活對象,以及在Minor GC時被轉移到另一個Survivor區中的存活對象。

年老代:當Java對象在Survivor區中經過多次復制后仍然存活,它們就會被晉升到年老代。年老代是專門存放Java長生命周期對象的區域,因此也被稱為Old Generation。當年老代區域無法容納新創建的Java對象時,就會發生一次Full GC(全局垃圾收集),將整個堆內存中無用的對象都清除掉。

永久代:是一塊專門存儲Java類(Class)信息的區域,也被稱為Method Area。在Java 8及以后的版本中,永久代已經被Metaspace取代。

YGC和FGC的原理:
在Java的內存管理中,每一次GC都有一個主要的目標,就是清除無用的對象,重新回收內存空間。另外,JVM的內存管理還存在一些通用的策略,比如對象的創建、移動和回收等。

YGC(年輕代GC):
在JVM中,當Eden區和Survivor區中沒有存活對象時,就會進行一次YGC。YGC的主要目標是清除年輕代中的無用對象,將存活對象移動到Survivor區。在經過一定時間和一定次數的YGC后,年輕代中的存活對象會被晉升到年老代。這是因為年老代中的對象生命周期較長,因此在Full GC時才會被收集。

FGC(Full GC):
在JVM中,當年老代區域無法容納新創建的Java對象時,就會發生一次Full GC,將整個堆內存中無用的對象都清除掉。Full GC清理的對象范圍包括年輕代、年老代和永久代。Full GC會帶來較長的停頓時間,因此需要盡可能地避免觸發Full GC。

總結:
YGC主要是針對年輕代和Survivor區進行垃圾回收的,而FGC則是對整個堆內存進行垃圾回收的。它們的共同目標都是將無用的對象從內存中清理出去,釋放內存空間,以便程序能夠更加高效地運行。

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

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

相關文章

linux 設置nginx開機自啟

1、關閉當前nginx運行 systemctl stop nginx 2、添加以下內容到nginx.service文件,注意nginx.pid文件的路徑,要替換哦! vim /etc/systemd/system/nginx.service [Unit] DescriptionThe NGINX HTTP and reverse proxy server Afternetwork…

ArcGIS如何快速對齊兩個圖層

1、問題 如何讓兩個圖層快速對齊 2、使用捕捉工具 移動點或折點,使其與其他要素的折點、邊或端點精確重合。 可指定捕捉規則來控制是將輸入折點捕捉到指定距離范圍內的最近折點、邊還是端點。

MySQL數字相關數據處理函數

目錄 1. 隨機數生成 rand ( ) 2. 四舍五入 round() 3. 舍去 truncate ( ) 4. 向上/下取整 5. 空處理 ifnull( x , y ) 1. 隨機數生成 rand ( ) rand ( ) 生成 0 到 1 的隨機數; rand ( x ) 生成 0 到 1 的隨機數…

簡單理解Lua 協程(coroutine)

也許更好的閱讀體驗 協程簡單理解為可以暫停的線程,但是同一時刻只有一個協程可以處于運行狀態。 文章目錄 coroutine.create()coroutine.resume()coroutine.wrap()coroutine.yield()coroutine.resume()參數傳遞resume和yield之間互換數據 coroutine.create() lua…

403 禁止錯誤: 它是什么?如何修復?

您應該對403錯誤代碼很熟悉!這種錯誤會導致流量損失,甚至錯失一些商業機會! 什么?您在自己的網站上遇到了403錯誤?請立即修復它!但是什么原因導致這種錯誤?該如何解決?這兩個問題都…

66種智能優化算法和改進優化算法優化BP神經網絡【開源代碼!】【文末福利IT學習資料】

前言 熟話說得好,創新點不夠,智能優化算法來湊,不要覺得羞恥,因為不僅我們這么干,很多外國人也這么干!因為創新點實在太難想了,和優化算法結合下是最簡單的創新點了! 之前給大家分享…

485通訊抗干擾,超時重發,不斷重連的程序架構

485通訊抗干擾,超時重發,不斷重連的編程思路 在工程中會遇到一種情況,當通信受到干擾之后,數據超時重發多次,無法被成功發出去,當恢復干擾后,之前發送的指令就被報錯清掉了,相當于串口掉線之后,即使短暫時間內通信連上,掉線之后發出的指令也不生效。 為了確保受到干…

OFDM符號周期

OFDM符號周期的確定 OFDM符號周期的確定是一個復雜的過程,需要考慮多個因素。以下是主要的考慮因素和確定步驟: 主要考慮因素 信道特性 多徑延遲擴展相干時間 系統要求 數據速率頻譜效率 硬件限制 采樣率計算復雜度 應用場景 移動性要求覆蓋范圍 …

spark shuffle寫操作——SortShuffleWriter

寫入的簡單流程: 1.生成ExternalSorter對象 2.將消息都是插入ExternalSorter對象中 3.獲取到mapOutputWriter,將中間產生的臨時文件合并到一個臨時文件 4.生成最后的data文件和index文件 可以看到寫入的重點類是ExternalSorter對象 ExternalSorter 基…

Vant Ui 最新訪問地址

Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. 順帶一個頂部導航欄正常寫法 先使用吸頂為0&#xff0c;然后再寫nav-bar <van-sticky :offset-top"0"> <van-nav-bar class"top-title" title"村集體土地公示&q…

對為什么react需要時間分片,vue3不需要的淺學習

1、時間分片 時間分片指在讓應用在cpu進行大量計算時也能與用戶交互&#xff0c;但時間分片只能對大量cpu計算進行優化&#xff0c;無法優化復雜DOM操作&#xff0c;因為要確保用戶正在操作的界面是最新。 web卡頓的場景&#xff1a; 1、cpu計算量不大&#xff0c;但dom操作…

人工智能算法工程師(中級)課程1-Opencv視覺處理之基本操作與代碼詳解

大家好&#xff0c;我是微學AI&#xff0c;今天給大家介紹一下人工智能算法工程師(中級)課程1-Opencv視覺處理之基本操作與代碼詳解。OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺和機器學習軟件庫。它提供了各種視覺處理函數&am…

Redis為什么變慢了?一文講透如何排查Redis性能問題

Redis 作為優秀的內存數據庫&#xff0c;其擁有非常高的性能&#xff0c;單個實例的 OPS 能夠達到 10W 左右。但也正因此如此&#xff0c;當我們在使用 Redis 時&#xff0c;如果發現操作延遲變大的情況&#xff0c;就會與我們的預期不符。 你也許或多或少地&#xff0c;也遇到…

以太網中的各種幀結構

幀結構&#xff08;Ethernet Frame Structure&#xff09;介紹 以太網信號幀結構&#xff08;Ethernet Signal Frame Structure&#xff09;&#xff0c;有被稱為以太網幀結構&#xff0c;一般可以分為兩類 —— 數據幀和管理幀。 按照 IEEE 802.3&#xff0c;ISO/IEC8803-3 …

短視頻矩陣管理系統:如何提升內容質量,幫助企業獲客?

在數字化營銷蓬勃發展的今天&#xff0c;短視頻已成為企業推廣的重要陣地。然而&#xff0c;如何高效管理短視頻內容&#xff0c;提升內容質量&#xff0c;進而幫助企業精準獲客&#xff0c;成為企業亟待解決的問題。短視頻矩陣管理系統應運而生&#xff0c;以其強大的功能和靈…

TCP/IP協議超時重傳,以及應用層超時重傳一文詳解

很多人會有這樣的疑問 TCP/IP協議內置了超時重傳的功能&#xff0c;那為什么連接完全斷開或超時時&#xff0c;應用層代碼段還會進行重傳處理呢&#xff1f; TCP協議的重傳機制 客戶端 服務器| ||---- 數據段1 --…

編程范式之并發編程

目錄 前言1. 并發編程的定義2. 并發編程的特點2.1 任務交替執行2.2 狀態共享與同步2.3 并行執行 3. 并發編程的適用場景3.1 高性能計算3.2 I/O 密集型應用3.3 實時系統 4. 并發編程的優點4.1 提高資源利用率4.2 縮短響應時間4.3 提高系統吞吐量 5. 并發編程的缺點5.1 編程復雜性…

硬盤模式vmd怎么改ahci_電腦vmd改ahci模式詳細步驟

最近有很多網友問&#xff0c;我新買的電腦安裝原版win10或win11找不到驅動器呀&#xff0c;進入第三方pe又找不到硬盤&#xff0c;找到硬盤安裝后又出現安裝藍屏的情況&#xff0c;新機器怎么回事呀&#xff1f;這位網友內心有點崩潰&#xff0c;不知道啥原因。其實這些都是由…

初識c++(類與對象——上)

一、類的定義 1、類定義格式 ? class為定義類的關鍵字&#xff0c;Stack為類的名字&#xff0c;{}中為類的主體&#xff0c;注意類定義結束時后面分號不能省 略。類體中內容稱為類的成員&#xff1a;類中的變量稱為類的屬性或成員變量; 類中的函數稱為類的方法或 者成員函…

損失函數 - Transformer教程

在人工智能和深度學習的領域&#xff0c;Transformer模型已經成為了非常流行的選擇。而在Transformer模型的訓練過程中&#xff0c;損失函數扮演了至關重要的角色。今天&#xff0c;我們就來深入探討一下什么是損失函數&#xff0c;以及它在Transformer中的應用。 什么是損失函…