【JVM】JVM垃圾收集器

文章目錄

  • 什么是JVM垃圾收集器
  • 四種垃圾收集器(按類型分)
    • 1.串行垃圾收集器(效率低)
    • 2.并行垃圾收集器(JDK8默認使用此垃圾回收器)
    • 3.CMS(并發)垃圾收集器(只針對老年代垃圾回收的)
    • 4.G1垃圾回收器(在JDK9之后默認使用G1)
      • 第一階段----->Young Collection(年輕代垃圾回收)
      • Young Collection + Concurrent Mark (年輕代垃圾回收+并發標記)
      • 第三階段----->Mixed Collection (混合垃圾回收,新老都參與)
    • G1和CMS區別

什么是JVM垃圾收集器

垃圾收集器是負責執行垃圾回收的組件,它們用于管理Java程序運行時的內存分配和釋放。垃圾收集器的主要任務是自動回收不再使用的內存對象,并將內存空間重新回收以供程序繼續使用。

四種垃圾收集器(按類型分)

1.串行垃圾收集器(效率低)

Serial和Serial Old串行垃圾收集器,是指使用單線程進行垃圾回收,堆內存較小,適合個人電腦

  • Serial 作用于新生代,采用復制算法
  • Serial Old 作用于老年代,采用標記-整理算法

垃圾回收時,只有一個線程在工作,并且java應用中的所有線程都要暫停(STW),等待垃圾回收的完成。

在這里插入圖片描述

2.并行垃圾收集器(JDK8默認使用此垃圾回收器)

Parallel New和Parallel Old是一個并行垃圾回收器,JDK8默認使用此垃圾回收器

  • Parallel New作用于新生代,采用復制算法
  • Parallel Old作用于老年代,采用標記-整理算法

垃圾回收時,多個線程在工作,并且java應用中的所有線程都要暫停(STW),等待垃圾回收的完成。(通過并行執行垃圾回收以提高性能)

相比較與串行垃圾收集器,并行垃圾收集器無非就是多開寫線程來做垃圾回收,其實同樣也要暫停所有正在執行的線程,只不過在多個線程并行回收效率比串行高

在這里插入圖片描述

3.CMS(并發)垃圾收集器(只針對老年代垃圾回收的)

CMS全稱 Concurrent Mark Sweep,是一款并發的、使用標記-清除算法的垃圾回收器,該回收器是針對老年代垃圾回收的,是一款以獲取最短回收停頓時間為目標的收集器,停頓時間短用戶體驗就好

最大特點是在進行垃圾回收時,應用仍然能正常運行。
在這里插入圖片描述

4.G1垃圾回收器(在JDK9之后默認使用G1)

G1垃圾收集器的設計目標是在可控的停頓時間實現高吞吐量的垃圾回收。

在這里插入圖片描述
在這里插入圖片描述

  • 應用于新生代老年代
  • 劃分成多個區域每個區域都可以充當 eden,survivor,old, humongous,其中 humongous 專為大對象準備
  • 采用標記整理算法

因為基本上G1主要針對大型堆內存進行垃圾回收,而復制算法在大型堆內存上的應用存在一些挑戰和限制。(必須考慮內存空間使用率)

  • 響應時間與吞吐量兼顧

  • 分成三個階段:新生代回收、并發標記、混合收集(在不同的條件下被觸發)
    在這里插入圖片描述

  • 如果并發失敗(即回收速度趕不上創建新對象速度),會觸發 Full GC(盡量避免)

如果對象內存分配速度過快,mixed gc來不及回收,導致老年代被填滿,就會觸發一次full gc,G1的full gc算法就是單線程執行的serial old gc,會導致異常長時間的暫停時間,需要進行不斷的調優,盡可能的避免full gc.

第一階段----->Young Collection(年輕代垃圾回收)

  • 初始時,所有區域都處于空閑狀態

在這里插入圖片描述

  • 創建了一些對象,挑出一些空閑區域作為eden區存儲這些對象
    在這里插入圖片描述
  • 當伊甸園需要垃圾回收時,挑出一個空閑區域作為幸存區(s),用復制算法復制存活對象需要暫停用戶線程
    在這里插入圖片描述
  • 隨著時間流逝,eden區的內存又有不足 將eden區以及之前幸存區中的存活對象,采用復制算法,復制到新的幸存區,其中較老對象晉升至老年代(o)

XX:MaxTenuringThreshold(默認15),計算出一個恰當的任期閾值,凡是超過任期閾值的對象都會被晉升到老年代。
或者幸存區里有大對象,也會直接晉升到老年代(畢竟大對象,復制來復制去影響整體效率)

在這里插入圖片描述

Young Collection + Concurrent Mark (年輕代垃圾回收+并發標記)

老年代占用內存超過閾值(默認是45%)后,觸發并發標記這時無需暫停用戶線程
在這里插入圖片描述
并發標記之后,會有重新標記階段解決漏標問題此時需要暫停用戶線程。
這些都完成后就知道了老年代有哪些存活對象,隨后進入混合收集階段。此時不會對所有老年代區域進行回收,而是根據停頓時間目標優先回收價值高(存活對象少)的區域(這也是 Gabage First 名稱的由來)。

注意,這個階段只是做標記,根據重新標記停頓時間來判斷哪些老年代里面或的對象少,下一階段優先對這些回收價值高的老年代來回收
在這里插入圖片描述

第三階段----->Mixed Collection (混合垃圾回收,新老都參與)

混合收集階段中,參與復制的有 eden、survivor、old

在這里插入圖片描述
復制完成,內存得到釋放。進入下一輪的新生代回收、并發標記、混合收集

G1和CMS區別

在這里插入圖片描述

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

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

相關文章

設計模式之七:適配器模式與外觀模式

面向對象適配器將一個接口轉換成另一個接口,以符合客戶的期望。 // 用火雞來冒充一下鴨子class Duck { public:virtual void quack() 0;virtual void fly() 0; };class Turkey { public:virtual void gobble() 0;virtual void fly() 0; };class TurkeyAdapter :…

利用爬蟲爬取圖片并保存

1 問題 在工作中,有時會遇到需要相當多的圖片資源,可是如何才能在短時間內獲得大量的圖片資源呢? 2 方法 我們知道,網頁中每一張圖片都是一個連接,所以我們提出利用爬蟲爬取網頁圖片并下載保存下來。 首先通過網絡搜索…

Linux 1.2.13 -- IP分片重組源碼分析

Linux 1.2.13 -- IP分片重組源碼分析 引言為什么需要分片傳輸層是否存在分段操作IP分片重組源碼分析ip_createip_findip_frag_createip_doneip_glueip_freeip_expireip_defragip_rcv 總結 本文源碼解析參考: 深入理解TCP/IP協議的實現之ip分片重組 – 基于linux1.2.13 計網理論…

樹莓派RP2040 用Arduino IDE安裝和編譯

目錄 1 Arduino IDE 1.1 IDE下載 1.2 安裝 arduino mbed os rp2040 boards 2 編程-燒錄固件 2.1 打開點燈示例程序 2.2 選擇Raspberry Pi Pico開發板 2.3 編譯程序 2.4 燒錄程序 2.4.1 Raspberry Pi Pico開發板首次燒錄提示失敗 2.4.2 解決首次下載失敗問題 2.4.2.1…

curl 快速入門使用教程

你好,我是悅創。 curl 是一個強大的命令行工具,用于獲取或發送數據,包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、DICT、TELNET、LDAP 或 FILE 協議等。在本教程中,我們將主要介紹如何使用 curl 進行 HTTP/HTTPS 請求。 1. 安…

Java基礎五之for循環小練習

加油,新時代大工人! 一、Java基礎之算術運算符 二、Java基礎之類型轉換 三、Java基礎之【字符串操作以及自增自減操作】 四、Java基礎之賦值運算符和關系運算符 package base;import java.io.InputStream; import java.util.Scanner;/*** author wh* date 2023年08…

無涯教程-Perl - recv函數

描述 This function receives a message on SOCKET attempting to read LENGTH bytes, placing the data read into variable SCALAR.The FLAGS argument takes the same values as the recvfrom( ) system function, on which the function is based. When communicating wit…

論文淺嘗 | 面向多步推理任務專業化較小語言模型

筆記整理:張沈昱,東南大學碩士,研究方向為自然語言處理 鏈接:https://github.com/FranxYao/FlanT5-CoT-Specialization 動機 本文的動機是探索如何在多步推理任務中通過大型語言模型提升較小的語言模型的性能。作者認為&#xff0…

云開發超多功能工具箱組合微信小程序源碼/附帶流量主

介紹: 這是一款云開發超多功能工具箱組合微信小程序源碼附帶流量主功能,小程序內包含了40余個功能,堪稱全能工具箱了,大致功能如下: 證件照制作 | 垃圾分類查詢 | 個性簽名制作 二維碼生成丨文字九宮格 | 手持彈幕丨…

總結synchronized

一.synchronized的特性 synchronized 是 Java 語言中內置的關鍵字,用于實現線程同步,以確保多線程環境下共享資源的安全訪問。 互斥性:synchronized保證了同一時刻只有一個線程可以執行被synchronized修飾的代碼塊或方法。當一個線程進入sync…

使用GraphQL在Postman中進行API測試

GraphQL 是一種用于API的開源數據查詢和操作語言,用于API的查詢語言和運行時。它使客戶端能夠精確地指定其數據需求,并獲得預測性地結果。GraphQL旨在提高API的效率、靈活性和可靠性。 Postman 是一款用于API開發的強大工具,它支持REST和Gra…

LVS簡介及LVS-DR搭建

目錄 一. LVS簡介: 1.簡介 2. LVS工作模式: 3. LVS調度算法: 4. LVS-DR集群介紹: 二.LVS-DR搭建 1.RS配置 1)兩臺RS,需要下載好httpd軟件并準備好配置文件 2)添加虛擬IP(vip&…

Python爬蟲——requests_cookie登陸古詩文網

尋找登陸需要的參數 __VIEWSTATE:aiMG0UXAfCzak10C7436ZC/RXoZbM2lDlX1iU/4wjjdUNsW8QUs6W2/3M6XIKagQZrC7ooD8Upj8uCnpQMXjDAp6fS/NM2nGhnKO0KOSXfT3jGHhJAOBouMI3QnlpJCQKPXfVDJPYwh169MGLFC6trY __VIEWSTATEGENERATOR: C93BE1AE from: http://so.gushiwen.cn/user/collect.…

linux 命令--查看網絡端口命令

使用 netstat 檢查端口 netstat 是一個命令行工具,可以提供有關網絡連接的信息。 netstat - atulnp會顯示所有端口和所有對應的程序,用grep管道可以過濾出想要的字段 -a :all,表示列出所有的連接,服務監聽&#xff…

Android JNI開發從0到1,java調C,C調Java,保姆級教程詳解

前些天發現了一個蠻有意思的人工智能學習網站,8個字形容一下"通俗易懂,風趣幽默",感覺非常有意思,忍不住分享一下給大家。 👉點擊跳轉到教程 第一步首先配置Android studio的NDK開發環境,首先在Android studio中下載NDK…

如何防止CSRF攻擊

背景 隨著互聯網的高速發展,信息安全問題已經成為企業最為關注的焦點之一,而前端又是引發企業安全問題的高危據點。在移動互聯網時代,前端人員除了傳統的 XSS、CSRF 等安全問題之外,又時常遭遇網絡劫持、非法調用 Hybrid API 等新…

Java超級瑪麗小游戲制作過程講解 第六天 創建背景類

package com.sxt;import java.awt.image.BufferedImage;public class BackGround {//當前場景要顯示的圖像 private BufferedImage bgImagenull;//記錄當前是第幾個場景 private int sort;//判斷是否是最后一個場景 private boolean flag;public BackGround(){}public BackGrou…

【CGroupAndroid實踐篇】四、Native Service進程啟動及控制組遷移

寫在前面 承接上一篇,在cgroup子系統初始化完成后,init會繼續執行開機流程,且通過代哦用ExecuteCommand()函數。 /system/core/init/init.cppint SecondStageMain(int argc, char** argv) {......ActionManager& am = ActionManager::GetInstance();am.ExecuteOneCo…

ASIC芯片設計全流程項目實戰課重磅上線 ,支持 65nm制程流片 !

全流程項目實戰課學什么? 此次推出【 ASIC芯片設計全流程項目實戰課】,基于IPA圖像處理加速器,以企業級真實ASIC項目為案例,學員可參與全流程項目實踐,以及65nm真實流片! 眾所周知,放眼整個IC碩…

【Linux】【驅動】驅動框架以及掛載驅動

【Linux】【驅動】驅動框架以及掛載驅動 緒論1.配置開發環境2. 編寫驅動文件3. 編譯Makefile文件4.編譯5. 掛載驅動注意:有些開發板打開了或者禁止了printk信息,導致你看到的實驗現象可能不一樣,此時已經將文件移動到了開發板中,開發板查看文…