7-1JVMCG垃圾回收

一、GC的作用與原理

?核心功能?

自動識別并回收堆內存中不再被引用的對象,釋放內存空間。
避免手動管理內存的復雜性(如C/C++中的delete/free操作),降低內存泄漏風險。
?判斷對象可回收的方法?

?可達性分析算法:從GC Roots(如虛擬機棧、靜態變量、本地方法棧等)出發,遍歷對象引用鏈,無法到達的對象標記為可回收。
替代了傳統的引用計數法(易循環引用導致內存泄漏)。

二、分代管理與GC類型

JVM將堆內存劃分為不同代區,針對不同生命周期對象采用差異化回收策略:

?新生代(Young Generation)??

?區域劃分:Eden區(新對象分配地)、Survivor區(S0/S1,存活對象過渡區)。
?Minor GC/Young GC:當Eden區滿時觸發,存活對象復制到Survivor區,多次存活后晉升老年代。
?特點:高頻、快速,采用復制算法?(減少碎片)。
?老年代(Old Generation)??

?Major GC/Old GC:CMS收集器特有,單獨回收老年代(其他收集器通常直接觸發Full GC)。
?Full GC:回收整個堆(含方法區/元空間),觸發條件包括:
老年代空間不足。
方法區(永久代)內存不足(JDK8前)。
System.gc()顯式調用(可通過參數禁用)。

三、常見垃圾收集器

JVM提供多種收集器,適應不同場景需求:

?新生代收集器?

?Serial:單線程,適合客戶端應用(低資源消耗)。
?ParNew:多線程版Serial,配合CMS使用。
?Parallel Scavenge:吞吐量優先,適合后臺計算任務。
?老年代收集器?

?CMS(Concurrent Mark Sweep)?:并發標記清除,減少停頓時間,但易碎片化。
?G1(Garbage-First)?:分區回收,兼顧吞吐與低延遲,適合大堆內存。
?全堆收集器?

?ZGC/Shenandoah:超低延遲(毫秒級停頓),適用于實時系統。

四、GC調優策略

?目標選擇?

?吞吐量優先:如Parallel Scavenge + Parallel Old,適合批處理任務。
?低延遲優先:如G1/CMS,適合Web服務。
?關鍵參數調整?

新生代與老年代比例(-XX:NewRatio)。
Survivor區比例(-XX:SurvivorRatio)。
堆大小(-Xms初始堆、-Xmx最大堆)。
?監控工具?

jstat查看GC頻率與耗時。
VisualVM分析堆內存分布。

五、GC算法對比

?標記-清除:簡單但碎片化嚴重。
?復制:高效無碎片,但內存利用率低(適合新生代)。
?標記-整理:解決碎片問題,適合老年代(如Serial Old)。
?分代收集:綜合不同算法,適應對象生命周期差異。

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

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

相關文章

yunedit-post ,api測試比postman更好

postman應該是大家最熟悉的api測試軟件了,但是由于它是外國軟件,使用它的高端功能注冊和繳費都比較麻煩。生成在線文檔分享也經常無法訪問被攔截掉。 這里可以推薦一下yunedit-post,該有的功能都有。 https://www.yunedit.com/postdetail …

010 rocketmq批量消息

文章目錄 批量消息BatchProducer.javaBatchConsumer.java 批量消息 批量發送可以提?發送性能,但有?定的限制: topic 相同 waitStoreMsgOK 相同 (?先我們建設消息的iswaitstoremsgoktrue(默認為true), 如果沒有異常,我們將始終收到"O…

6.6.6 嵌入式SQL

文章目錄 2個核心問題識別SQL語句主語言和SQL通信完整導圖 2個核心問題 SQL語句嵌入高級語言需要解決的2個核心問題是:如何識別嵌入語句?如何讓主語言(比如C,C語言)和SQL通信? 識別SQL語句 為了識別主語言中嵌入的SQL…

Windows安裝sql server2017

看了下官網的文檔,似乎只有ubuntu18.04可以安裝,其他debian系的都不行,還有通過docker的方式安裝的。 雙擊進入下載的ISO,點擊執行可執行文件,并選擇“是” 不要勾選 警告而已,不必理會 至少勾選這兩…

RuoYi框架介紹,以及如何基于Python使用RuoYi框架

若依框架(RuoYi)是一款基于Spring Boot和Vue.js的開源快速開發平臺,廣泛應用于企業級應用開發。它提供了豐富的功能模塊和代碼生成工具,幫助開發者快速搭建后臺管理系統。 主要特點 前后端分離:前端采用Vue.js&#x…

從零搭建Tomcat:深入理解Java Web服務器的工作原理

Tomcat是Java生態中最常用的Web服務器之一,廣泛應用于Java Web應用的部署和運行。本文將帶你從零開始搭建一個簡易的Tomcat服務器,深入理解其工作原理,并通過代碼實現一個基本的Servlet容器。 1. Tomcat的基本概念 Tomcat是一個開源的Servl…

京東云DeepSeek-R1模型一鍵部署教程,基于智算GCS【成本2元】

使用京東云智算一鍵部署DeepSeek-R1模型,京東云智算服務AI平臺GCS支持DeepSeek-R1模型預裝環境,支持1.5B、7B、32B及70B參數模型環境,用戶可在GCS中快速啟動,使用ChatbotUI或者Open-WebUI作為用戶界面,進行測試并接入業…

Jenkins 自動打包項目鏡像部署到服務器 ---(前端項目)

Jenkins 新增前端項目Job 指定運行的節點 選擇部署運行的節點標簽,dev標簽對應開發環境 節點的遠程命令執行配置 jenkins完整流程 配置源碼 拉取 Credentials添加 觸發遠程構建 配置后可以支持遠程觸發jenkins構建(比如自建的CICD自動化發布平臺&…

7.2 - 定時器之計算脈沖寬度實驗

文章目錄 1 實驗任務2 系統框圖3 軟件設計 1 實驗任務 本實驗任務是通過CPU私有定時器來計算按鍵按下的時間長短。 2 系統框圖 參見7.1。 3 軟件設計 注意事項: 定時器是遞減計數的,需要考慮StartCount<EndCount的情況。 /***********…

雙機熱備旁掛組網實驗

1拓撲圖 2.要求 1 、 SW3 的流量 正常情況下: SW1_VRF-->FW1--->SW1_Public--->R5 故障情況下: SW2_VRF-->FW2--->SW2_Public--->R6 2 、 SW4 的流量 正常情況下: SW2_VRF-->FW2--->SW2_Public--->R6 故障情…

2025春新生培訓數據結構(樹,圖)

教學目標: 1,清楚什么是樹和圖,了解基本概念,并且理解其應用場景 2,掌握一種建圖(樹)方法 3,掌握圖的dfs和樹的前中后序遍歷 例題與習題 2025NENU新生培訓(樹&#…

HTML 日常開發常用標簽

文章目錄 HTML 日常開發常用標簽1、基本結構標簽2、內容標簽3、多媒體標簽4、表單標簽5、列表和定義標簽6、表格標簽7、鏈接和圖像8、元數據9、語義化標簽(HTML5新增)10、框架和內聯11、交互12、過時或不推薦使用的標簽 HTML 日常開發常用標簽 1、基本結…

7.1.1 計算機網絡的組成

文章目錄 物理組成功能組成工作方式完整導圖 物理組成 計算機網絡是將分布在不同地域的計算機組織成系統,便于相互之間資源共享、傳遞信息。 計算機網絡的物理組成包括硬件和軟件。硬件中包含主機、前端處理器、連接設備、通信線路。軟件中包含協議和應用軟件。 功…

【AI論文】MedVLM-R1:通過強化學習激勵視覺語言模型(VLMs)的醫療推理能力

摘要:推理是推進醫學影像分析的關鍵前沿領域,其中透明度和可信度對于贏得臨床醫生信任和獲得監管批準起著核心作用。盡管醫學視覺語言模型(VLMs)在放射學任務中展現出巨大潛力,但大多數現有VLM僅給出最終答案&#xff…

國產RISCV64 也能跑AI

Banana Pi BPI-F3 進控時空 K1開發板 AI人工智能AI 部署工具使用手冊_bianbu software-CSDN博客 文章置頂了 有興趣的可以一起留言探索,非常有意思: 我最近接觸到了進迭時空研發的 Spacengine?,這是一套能在進迭時空 RISC-V 系列芯片上部署…

APISIX Dashboard上的配置操作

文章目錄 登錄配置路由配置消費者創建后端服務項目配置上游再創建一個路由測試 登錄 http://192.168.10.101:9000/user/login?redirect%2Fdashboard 根據docker 容器里的指定端口: 配置路由 通過apisix 的API管理接口來創建(此路由,直接…

【WPF】綁定報錯:雙向綁定需要 Path 或 XPath

背景 最開始使用的是 TextBlock: <ItemsControl ItemsSource"{Binding CameraList}"><ItemsControl.ItemsPanel><ItemsPanelTemplate><StackPanel Orientation"Horizontal"/></ItemsPanelTemplate></ItemsControl.Item…

Kotlin協變與逆變區別

在Kotlin中&#xff0c;協變和逆變是泛型編程中的兩個重要概念&#xff0c;它們允許我們在類型系統中更加靈活地處理類型關系。 1.協變&#xff1a;協變允許我們使用比原始類型更具體的類型。在kotlin中&#xff0c;通過在類型參數上加out關鍵字來表示協變,生產者&#xff0c;例…

如何調試Linux內核?

通過創建一個最小的根文件系統&#xff0c;并使用QEMU和GDB進行調試。 1.準備工作環境 確保系統上安裝了所有必要的工具和依賴項。 sudo apt-get update //更新一下軟件包 sudo apt-get install build-essential git libncurses-dev bison flex libssl-dev qemu-system-x…

Java 調試模式下 Redisson 看門狗失效

一、場景分析 前幾天在做分布式鎖測試&#xff1a; 在調試模式下&#xff0c;lock.lock() 之后打上斷點&#xff0c;想測試一下在當前線程放棄鎖之前&#xff0c;別的線程能否獲取得到鎖。 發現調試模式下&#xff0c;看門狗機制失效了&#xff0c;Redis 上 30 秒后&#xff0…