Java垃圾回收_1

一、垃圾回收

1.如何判斷對象可以回收

(1)引用計數法

存在循環引用問題, Java未使用這種算法

在引用計數法中,每個對象都有一個引用計數器,記錄著指向該對象的引用數量。當引用計數器為零時,表示沒有任何引用指向該對象,該對象可以被釋放,回收其占用的內存。
在這里插入圖片描述

(2)可達性分析法

根對象:肯定不能被垃圾回收的對象

在這里插入圖片描述

2.Java引用類型

1.強引用

被GC-Root引用

2.軟引用

沒有被強引用, 垃圾回收時內存不夠,軟引用被回收

3.弱引用

沒有強引用,只要發生垃圾回收,弱引用會被回收掉

軟引用 弱引用也占用一定的內存,對 它兩進行釋放,通過引用隊列

在這里插入圖片描述

4. 虛引用

必須配合引用隊列使用,虛引用對象被垃圾回收時,虛引用 自己放入引用隊列,由一個線程釋放內存

在這里插入圖片描述

在這里插入圖片描述

5.終結器引用

Object中有finallize方法,對象重寫finallize方法 ,并且沒有強引用 引用它,可以被當作垃圾回收

在這里插入圖片描述

在這里插入圖片描述

軟引用實例

在這里插入圖片描述

弱引用實例在這里插入圖片描述

垃圾回收算法

1.標記清除算法

標記清除算法(Mark-Sweep Algorithm)是一種常見的垃圾回收算法,用于自動管理動態分配的內存空間。其原理如下:

標記階段(Mark):從根對象開始,通過引用鏈追蹤,標記所有的活動對象。標記過程中,將活動對象的標記位設置為有效狀態,表示這些對象是可達的,不會被回收。

清除階段(Sweep):在標記階段完成后,遍歷整個內存空間,將未被標記的對象視為垃圾對象,將其所占用的內存空間釋放,以便下次分配給新的對象使用。

優點:速度快
缺點:容易造成內存碎片
標記清除算法通過標記和清除的過程,將不再被使用的內存空間回收,以避免內存泄漏和內存碎片的問題。
然而,標記清除算法也存在一些缺點,如清除階段會產生內存碎片,可能會導致內存分配的效率降低。

在這里插入圖片描述

2.標記整理算法

在這里插入圖片描述

  • 標記階段:
    與其他垃圾回收算法一樣,標記-整理算法從根對象開始遍歷整個對象圖,標記所有與根對象可達的對象,即被引用的對象。
  • 整理階段:
    在整理階段,標記-整理算法會對內存空間進行整理,將所有存活的對象移動到一端,而未標記的對象則被認為是垃圾對象。
    移動存活對象的過程中,標記-整理算法會保持存活對象之間的相對位置關系,從而確保所有存活對象在整理后仍然是連續的。
  • 回收階段:
    在整理階段完成后,標記-整理算法會回收并釋放未標記的垃圾對象所占用的內存空間,從而實現垃圾回收。

優點:沒有內存碎片
缺點:速度慢

3.復制算法

在這里插入圖片描述

在這里插入圖片描述

復制算法的基本思想是將內存空間劃分為兩個大小相等的區域,通常稱為"From"空間和"To"空間。在垃圾回收過程中,首先將所有存活的對象從"From"空間復制到"To"空間中,然后對整個"From"空間進行垃圾回收,將未復制的垃圾對象清理掉。在下次垃圾回收時,交換"From"空間和"To"空間的角色,繼續進行復制和回收操作。這樣,"From"空間和"To"空間的角色不斷交替,實現了垃圾對象的回收和內存空間的復用。

優點:不會產生碎片
缺點:需要占用雙倍內存

分代回收

新生代空間不足,觸發MinorGC,先標記

在這里插入圖片描述
eden(伊甸園)滿了,采用復制算法將存活的對象復制到TO中,幸存的對象壽命+1
在這里插入圖片描述

交換From和To
在這里插入圖片描述

第二次垃圾回收

在這里插入圖片描述

當對象壽命超過閾值(15),晉升到老年代

在這里插入圖片描述

FullGC

老年代空間不足,先嘗試進行一次MinorGC ,之后空間任然不足,觸發FullGC

在這里插入圖片描述

在這里插入圖片描述
Stop the world 暫停其他線程,進行垃圾回收

4.垃圾回收器

4.1 串行垃圾回收器

  • 單線程
  • 堆內存較小 適合個人電腦

在這里插入圖片描述
新生代:復制算法
老年代: 標記 + 整理 算法

4.2 吞吐量優先

  • 多線程
  • 堆內存較大,多核CPU
  • 單位時間內,STW時間最短 0.2 0.2 = 0.4 只執行了兩次

在這里插入圖片描述
多個垃圾回收線程并行執行,不允許用戶工作線程運行

4.3響應時間優先

  • 多線程
  • 堆內存較大,多核CPU
  • 盡可能讓單次STW時間短 0.1 0.1 0.1 0.1 0.1 = 0.5

與用戶線程并發執行,在工作的同時用戶線程也能工作。工作代老年代

在這里插入圖片描述

5. G1 垃圾回收器

在這里插入圖片描述

5. 整體過程,分為三個部分

在這里插入圖片描述

5.1 Young Collection

新生代內存緊張,放入幸存區

在這里插入圖片描述

幸存區S有一部分晉升到老年區O

在這里插入圖片描述

5.2 Young Collection + CM (并發標記)

初始標記: 標記根對象
并發標記: 從根對象觸發,順引用鏈找到其他標記對象(老年代占用比例達到一定閾值,進行并發標記)

在這里插入圖片描述

5.3Mixed Collection混合收集

混合收集階段優先回收垃圾最多的區,不是收集所有老年代的垃圾 。目的暫停時間短

在這里插入圖片描述

5.4 FullGC

不懂

在這里插入圖片描述

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

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

相關文章

JavaSE:SE知識整體總結

1、引言 歷時一個多月的學習,已經掌握了JavaSE的知識,這篇博客就來做一下SE知識的總結~ 2、數據類型和變量 Java中的數據類型分為基本數據類型和引用數據類型。 2.1 基本數據類型 基本數據類型共有四類八種: 四類:整形、浮點…

在phpstorm2024版里如何使用Jetbrains ai assistant 插件 ?

ai assistant激活成功后,如圖 ai assistant渠道:https://web.52shizhan.cn/activity/ai-assistant 在去年五月份的 Google I/O 2023 上,Google 為 Android Studio 推出了 Studio Bot 功能,使用了谷歌編碼基礎模型 Codey,Codey 是…

SpringBoot HelloWorld 之 實現注冊功能

SpringBoot HelloWorld 之 實現注冊功能 一.配置 創建數據庫big_event CREATE TABLE user (id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ID,username varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT 用戶名,password varchar(32) COLLATE utf8_unicode_ci …

Vue3項目練習詳細步驟(第五部分:用戶模塊的功能)

頂部導航欄個人信息顯示 接口文檔 接口請求與綁定 導航欄下拉菜單功能 路由實現 退出登錄和路由跳轉實現 基本資料修改 頁面結構 接口文檔 接口請求與綁定 修改頭像 頁面結構 頭像回顯 頭像上傳 接口文檔 重置密碼 頁面結構 接口文檔 接口請求與綁定 頂部導航…

自然語言處理學習路線

學習目標 NLP 系統知識(從入門到入土) 學習內容 NLP的基本流程:(待更)文本預處理(標點符號處理、繁體轉簡體、分詞Tokenizer):(待更)詞袋模型(TF…

【T+】暢捷通T+軟件固定資產模塊反啟用

【問題描述】 暢捷通T軟件,固定資產模塊反啟用。 【解決方法】 針對賬套庫執行如下腳本清除資產的所有數據, 執行前請與客戶確認資產的所有數據都不要了,確認后備份賬套再執行腳本,切記!!! 然后…

Flutter 中的 ChipTheme 小部件:全面指南

Flutter 中的 ChipTheme 小部件:全面指南 Flutter 是一個由 Google 開發的跨平臺 UI 框架,它提供了一套豐富的組件集合,用于構建現代化的、響應式的移動和 Web 應用。ChipTheme 是 Flutter 中一個專門用于統一設置應用中所有 Chip 組件樣式的…

紅外熱成像觀驅一體儀,夜間驅鳥新利器

夜間驅鳥是機場鳥防工作的重點和難點,但紅外熱成像觀驅一體儀的出現解決了這個問題,它結合了紅外熱成像技術和激光驅鳥技術,極大地提升了夜間驅鳥工作的效率和安全性。 驅鳥技術詳解: 在夜晚低能見度的環境下,紅外熱成…

基于開源項目ESP32 SVPWM驅動無刷電機開環速度測試

基于開源項目ESP32 SVPWM驅動無刷電機開環速度測試 ?本篇硬件電路和代碼來源于此開源項目:https://github.com/MengYang-x/STM3F401-FOC/tree/main📍硬件電路和項目介紹,立創開源廣場:https://oshwhub.com/shadow27/tai-yang-nen…

【bug】在 Windows 上安裝 SDKMAN! 的完整指南

在 Windows 系統上,安裝 SDKMAN! 可能會遇到一些小問題。本文將詳細介紹如何解決這些問題并成功安裝 SDKMAN!。 問題描述 當在 PowerShell 中運行以下命令以安裝 SDKMAN! 時: curl -s get.sdkman.io | bash你可能會遇到以下錯誤: bash : …

前端面試題日常練-day45 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備,答案在文末 1. 在Bootstrap中,以下哪個類用于創建一個具有響應式的導航欄? a) .navbar-responsive b) .responsive-nav c) .navbar-collapse d) .collapse-navbar 2. 哪個Bootstrap類用…

2024 HN CTF WebMisc 部分 wp

Web ez_tp 判斷是thinkphp 3.2 參考官方手冊:https://www.kancloud.cn/manual/thinkphp/1697 判斷路由模式 URL_CASE_INSENSITIVE > true, // 默認false 表示URL區分大小寫 true則表示不區分大小寫URL_MODEL > 1, // URL訪問模式,可選參數0、1、…

Python使用動態代理的多元應用

Python作為一種功能強大且易于學習的編程語言,在網絡編程領域具有廣泛的應用。當Python與動態代理技術結合時,便開啟了一扇通往更多可能性的大門。以下將深入探討Python使用動態代理可以實現的多種應用。 首先,Python結合動態代理在網絡爬蟲…

中文多模態InternVL-Chat-V1-5,中文理解能力強勁,8 項指標超越商業模型,性能媲美 GPT-4V

前言 近年來,多模態大型語言模型(MLLM)的快速發展,為人工智能在圖像、文本等多模態信息理解和處理方面帶來了前所未有的突破。然而,現有的主流多模態模型多以英文為訓練語言,在中文理解和處理方面存在著明…

可用于嵌入式的解釋器調研對比,及lua解釋器介紹

嵌入式不一定只能用C! ---------------------------------------------------------------------------------------手動分割線-------------------------------------------------------------------------------- 本文章參考了以下文章: 這里是引用 ------------…

1113 錢串子的加法

idea 測試點3&#xff1a;輸入的兩個整數都是0測試點4.5&#xff1a;大數&#xff0c;需要用大數加法 solution1(測試點4&#xff0c;5不通過) 直接相加再轉30進制 #include<iostream> #include<string> using namespace std; typedef long long ll; string a,…

linux sed命令替換文件端口

1、需求描述&#xff1a;因sed -i ‘s/舊端口/新端口/g’ 文件&#xff0c;替換會直接增加端口導致端口直接追加后面&#xff0c;因此需要修改 要求&#xff1a;2300替換為23003&#xff0c;23001替換為23004 <value>192.168.1.133</value></constructor-arg>…

RGMII接口--->(001)FPGA實現RGMII接口(一)

&#xff08;001&#xff09;FPGA實現RGMII接口(一) 1 目錄 &#xff08;a&#xff09;FPGA簡介 &#xff08;b&#xff09;IC簡介 &#xff08;c&#xff09;Verilog簡介 &#xff08;d&#xff09;FPGA實現RGMII接口(一) &#xff08;e&#xff09;結束 1 FPGA簡介 &…

【科普向】【文末附gpt升級秘笈】《慶余年》鳳冠之工藝探究——Blender建模與3D打印之奧秘

《慶余年》鳳冠之工藝探究——Blender建模與3D打印之奧秘 一、引言 昔者&#xff0c;《慶余年》之熱播&#xff0c;引發天下觀眾之熱議。今者&#xff0c;其續作《慶余年2》之中&#xff0c;一場盛大的婚禮更是矚目。而此婚禮之上&#xff0c;唯一之鳳冠&#xff0c;竟出自一…

windows 10下conda環境目錄轉移

目錄 一&#xff1a;背景 二&#xff1a;轉移過程 三&#xff1a;環境驗證 一&#xff1a;背景 最近用conda安裝了幾個python環境&#xff0c;隨著安裝包和數據的不斷增大&#xff0c;發現C盤占用空間一直在增加&#xff0c;已經有十幾個G了&#xff0c;系統也變的越來越慢。…