java垃圾回收

垃圾回收

一個對象如果不再使用,需要手動釋放,否則就會出現內存泄漏。我們稱這種釋放對象的過程為垃圾回收,而需要程序員編寫代碼進行回收的方式為手動回收

內存泄漏指的是不再使用的對象在系統中未被回收,內存泄漏的積累可能會導致內存溢出

java中為了簡化對象的釋放,引入了自動的垃圾回收(garbage collection簡稱GC)機制通過垃圾回收器來對不再使用的對象完成自動的回收,垃圾回收器主要負責對堆上的內存進行回收。其他語言例如c#,python,go都擁有自己的垃圾回收器

定位垃圾的兩種方法

引用計數法

一個對象被引用了一次,在當前對象頭上遞增一次引用次數,如果這個對象的引用次數為0,代表這個對象可回收。

當對象間出現了循環引用的話,引用計數法會失效

可達性分析算法

掃描堆中的對象,看是否能夠沿著GC Root對象為起點的引用鏈找到該對象,找不到,表示可以回收

哪些對象可以作為GC Root?

虛擬機棧(棧幀中的本地變量表)中引用的對象

方法區中類靜態屬性引用的對象

方法區中常量引用的對象

本地方法棧中JNI(Native方法)引用的對象

垃圾清除算法

標記清除算法

標記和清除

1.根據可達性分析算法得出的垃圾進行標記

2.對這些標記為可回收的內容進行垃圾回收

優點:清理速度較快

缺點,碎片化嚴重,內存不連貫

標記整理算法

和標記清除算法前面都一致,但多了一步,對象移動內存位置使得內存連續

優點:不會有內存碎片

缺點:犧牲了性能和速度

復制算法

將內存空間一分為二,每次清除和回收時都將剩下的移動到另一端。

優點:在垃圾對象多的情況下,效率較高。清理后,內存無碎片

缺點:分配的兩塊內存空間,在同一時刻只能使用一般,內存使用率較低

分代收集算法

在java8時,堆被分為了兩份:新生代和老年代(1:2)

對于新生代,內部又被分為了三個區域:

eden區,新生的對象都分配到這里

survivor區:分著from和to

eden,from,to(8:1:1)

MinorGC,MixedGC,FullGC的區別是什么

MinorGC(youngGC)發生在新生代的垃圾回收,暫停時間短(STW)

MixedGC新生代+老年代部分區域的垃圾回收,G1收集器特有

FullGC新生代+老年代完整垃圾回收,展廳時間長(STW),應盡量避免

垃圾回收器

G1垃圾回收器機制

強引用,軟引用,弱引用,虛引用的區別

強引用:只有所有GCRoots對象都不通過強引用該對象,該對象才能被垃圾回收

軟引用:僅有軟引用引用該對象時,在垃圾回收后,內存如果仍然不足時會再次發出垃圾回收

弱引用:僅有弱引用引用該對象時,在垃圾回收時,無論內存是否充足,都會回收弱引用對象

虛引用:必須配合引用隊列使用,被引用對象回收時,會將虛引用入隊,由Reference Handler線程調用虛引用相關方法釋放直接內存

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

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

相關文章

美國經濟政策轉向標記之一

美聯儲沃勒在紐約舉行的 2024 年美國貨幣政策論壇上表示,他希望看到美聯儲投資組合出現兩項關鍵進展: 首先,我希望看到美聯儲的機構MBS持有量降至零。其次,我希望美聯儲轉向增加短期美國國債在持有資產中的占比。在金融危機之前&a…

【ArcGIS Pro二次開發】(83):ProWindow和WPF的一些技巧

在ArcGIS Pro二次開發中,SDK提供了一種工具界面【ArcGIS Pro ProWindow】。 關于ProWindow的用法,之前寫過一篇基礎的教程: 【ArcGIS Pro二次開發】(13):ProWindow的用法_arcgispro二次開發教程-CSDN博客 主要是對幾個常用控件…

異步編程實戰之webflux

一, 快速搭建webflux項目 1, 引入相關依賴 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.5</version><relativePath/> <!-- lookup parent fr…

【嵌入式實踐】【芝麻】【設計篇-2】從0到1給電動車添加指紋鎖:項目可行性分析

0. 前言 該項目是基于stm32F103和指紋模塊做了一個通過指紋鎖控制電動車的小工具。支持添加指紋、刪除指紋&#xff0c;電動車進入P檔等待時計時&#xff0c;計時超過5min則自動鎖車&#xff0c;計時過程中按剎車可中斷P檔狀態&#xff0c;同時中斷鎖車計時。改項目我稱之為“芝…

EMR StarRocks實戰——猿輔導的OLAP演進之路

目錄 一、數據需求產生 二、OLAP選型 2.1 需求 2.2 調研 2.3 對比 三、StarRocks的優勢 四、業務場景和技術方案 4.1 整體的數據架構 4.2 BI自助/報表/多維分析 4.3 實時事件分析 4.5 直播教室引擎性能監控 4.4 B端業務后臺—斑馬 4.5 學校端數據產品—飛象星球 4…

Ajax(黑馬學習筆記)

Ajax介紹 Ajax概述 我們前端頁面中的數據&#xff0c;如下圖所示的表格中的學生信息&#xff0c;應該來自于后臺&#xff0c;那么我們的后臺和前端是互不影響的2個程序&#xff0c;那么我們前端應該如何從后臺獲取數據呢&#xff1f;因為是2個程序&#xff0c;所以必須涉及到…

【ACM】—藍橋杯大一暑期集訓Day3

&#x1f680;歡迎來到本文&#x1f680; &#x1f349;個人簡介&#xff1a;陳童學哦&#xff0c;目前學習C/C、算法、Python、Java等方向&#xff0c;一個正在慢慢前行的普通人。 &#x1f3c0;系列專欄&#xff1a;陳童學的日記 &#x1f4a1;其他專欄&#xff1a;CSTL&…

langchain學習筆記(九)

RunnableBranch: Dynamically route logic based on input | &#x1f99c;?&#x1f517; Langchain 基于輸入的動態路由邏輯&#xff0c;通過上一步的輸出選擇下一步操作&#xff0c;允許創建非確定性鏈。路由保證路由間的結構和連貫。 有以下兩種方法執行路由 1、通過Ru…

Unity引擎中光源都有哪幾種,都有什么作用

本文由 簡悅 SimpRead 轉碼&#xff0c; 原文地址 mp.weixin.qq.com Unity 引擎為了實現游戲場景的明暗和光影效果&#xff0c;提供了四種類型的光源&#xff0c;分別是方向光&#xff08;Directional Lights&#xff09;、點光源&#xff08;Point Lights&#xff09;、聚光燈…

Vue開發實例(一)Vue環境搭建第一個項目

Vue環境搭建&第一個項目 一、環境搭建二、安裝Vue腳手架三、創建Vue項目 一、環境搭建 下載方式從官網下載&#xff1a;http://nodejs.cn/download/ 建議下載v12.16.0版本以上的&#xff0c;因為版本低無法創建Vue的腳手架 檢驗是否安裝成功 配置環境變量 新增NODE_HOME&…

win11系統中nginx簡單的代理配置

一.背景 為了公司安排的師帶徒任務。 操作系統版本&#xff1a;win11家庭版 nginx版本&#xff1a;1.24.0 二.配置代理 之前文章已經說明了nginx簡單的安裝&#xff0c;要看閱讀這個文章哈。web服務器nginx下載及在win11的安裝-CSDN博客 1.配置需求識別 前端服務nginx(80…

【探索AI】十七 深度學習之第3周:卷積神經網絡(CNN)(一)-CNN的基本原理與結構

第3周&#xff1a;卷積神經網絡&#xff08;CNN&#xff09; CNN的基本原理與結構 常見的卷積層、池化層與全連接層 LeNet、AlexNet等經典CNN模型 實踐&#xff1a;使用CNN進行圖像分類任務 CNN的基本原理與結構 引言與背景介紹 卷積神經網絡&#xff08;CNN&#xff09;是…

雙周回顧#007 - 前端與后端

前端的問題不是難&#xff0c;而是它面對最終用戶。只要用戶的喜好和口味發生變化&#xff0c;前端就必須跟上。 這導致前端不得不快速變化&#xff0c;因為用戶的口味正在越來越快地改變。 后端不需要面對最終用戶&#xff0c;需要解決的都是一些經典的計算機科學問題&#…

什么是Vue指令?請列舉一些常見的Vue指令以及它們的用法

Vue.js 是一款流行的前端框架&#xff0c;它的指令&#xff08;Directives&#xff09;是 Vue.js 提供的一種特殊屬性&#xff0c;用于在模板中對 DOM 元素進行直接操作。指令通常是以 v- 開頭的特殊屬性&#xff0c;用于響應式地將數據綁定到 DOM 元素上。 在 Vue 中&#xf…

C語言初階—函數(函數的聲明和定義,函數遞歸)

函數聲明&#xff1a; 1.告訴編譯器有一個函數叫什么&#xff0c;參數是什么&#xff0c;返回類型是什么&#xff0c;但是具體是不是存在&#xff0c;函數聲明決定不了。 2.函數的聲明一般出現在函數使用之前&#xff0c;要滿足先聲明后使用。 3.函數的聲明一般要放在頭文件中。…

Launch學習

參考博客&#xff1a; (1) 史上最全的launch的解析來啦&#xff0c;木有之一歐 1 ROS工作空間簡介 2 元功能包 src目錄下可以包含多個功能包&#xff0c;假設需要使用機器人導航模塊&#xff0c;但是這個模塊中包含著地圖、定位、路徑規劃等不同的功能包&#xff0c;它們的邏…

agent內存馬

搭建一個簡單的Servlet項目 ServletDemo package com.naihe;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;…

【探索AI】十一 深度學習之機器學習基礎

鑒于之前文章中提到的深度學習計劃&#xff0c;后續的文章會根據之前的接著繼續學習&#xff0c;python基礎略過&#xff0c;想學的同學請自學&#xff1a; python入門 python進階 機器學習基礎 機器學習是人工智能領域的一個子集&#xff0c;它專注于從數據中自動學習并提升…

vue2+若依框架plus交互 路由介紹

本周及寒假 參加了校企合作的工程過程管理&#xff0c;和學長學姐一起寫項目&#xff0c;之前學了vue也沒有應用&#xff0c;然后對框架很多組件的用法不太了解&#xff0c;前期耽誤了一些時間。 框架模塊 首先是框架模塊的介紹 api存了一些系統管理及發送請求的方法 例如p…

【python】`assert`斷言語句

assert是一個斷言語句&#xff0c;用于在代碼中檢查某個條件是否為真。 如果條件為假&#xff0c;將觸發AssertionError 異常&#xff0c;從而指示存在錯誤。