JVM---垃圾回收算法介紹

目錄

分代收集理論

三種垃圾回收算法

標記-清除算法(最基礎的、基本不用)

標記-復制算法

標記-整理算法


正式因為jvm有了垃圾回收機制,作為java開發者不會去特備關注內存,不像C和C++。

優點:開發門檻低、安全

缺點:性能問題。c和c++可以自己操控內存等,性能更高

垃圾回收學的是算法,垃圾回收有很多種算法,學完這個的目標一個是需要學習人家的思路,第二個是需要根據自己的業務特色去選用特定的垃圾回收算法

分代收集理論

建立在兩個假說之上:

????????弱分代假說(Weak Generational Hypothesis):絕大多數對象都是朝生夕滅的。

????????強分代假說(Strong Generational Hypothesis):熬過越多次垃圾收集過程的對象就越難以消亡。

原理:收集器應該將Java堆劃分出不同的區域,然后將回收對象依據其年齡(年齡即對象熬過垃圾收集過程的次數)分配到不同的區域之中存儲。根據不同區域采取不同的垃圾回收算法。至少將java堆分為兩部分:新生代和老年代。新生代中存朝生夕滅的對象,老年代中存熬過很多次垃圾回收。新生代熬過一次加一,到特定數值移到老年代中。

分代的好處:時間開銷、內存空間的有效利用

分代的弊端:如果新生代中的對象被老年代中引用,則在每次回收需要掃描所有老年代檢查飲用者是否是否存活,即跨界引用的問題。

分代弊端的解決方法:為了解決跨代引用,增加第三條法則:跨代引用相對同代引用更容易存活,很容易成為老年代對象,進而成為同代引用。同時為了不掃描整個老年代,老年代開辟出一塊空間,這塊空間只放跨代引用的對象

三種垃圾回收算法

標記-清除算法(最基礎的、基本不用)

????????原理:標記哪些對象存活那些死亡,然后清除死亡的

????????弊端

? ? ? ? ? ? ? ? ①、效率問題:如果Java堆中包含大量對象,而且其中大部分是需要被回收的,這時必須進行大量標記和清除的動作,導致標記和清除兩個過程的執行效率都隨對象數量增長而降低

? ? ? ? ? ? ? ? ②、內存碎片問題:之后可能因為沒有足夠的空間放大文件而導致下一次的垃圾回收提前

標記-復制算法

????????原理:空間分為1:1,在用的時候用一半,垃圾清除的時候將所用一半中不需要清除的順序地放到另一半上。研究表明,百分之98的對象熬不過第一輪垃圾清除,所以不需要1:1。將jvm堆區域分為三份(80%、10%10%),每次新生代可用的內存空間為其中的兩份占90%,而將其中不需要清理的放到剩余的百分之十上面,再次使用時空間為80%和這百分之10

????????解決了效率問題和內存碎片的問題

標記-整理算法

????????產生原因:標記復制中對象存活率較高時需要進行較多的復制操作,效率低。

????????原理:先標記,將存活的對象移動到一端,然后設置邊界,另外一端全刪。解決了碎片化的問題,

? ? ? ? 弊端:如果每次回收有大量存活,移動和更新耗費大量資源。在標記的時候需要停下所有的應用程序,不然可能標記完之后再次更改空間大小,使得標記的數據不準確。內存的訪問是用戶程序中最頻繁的操作之一,假如宕機的話,會直接影響應用程序的運行

? ? ? ? 解決方法:在平時進行標記清除,碎片化程度影響內存分配時進行標記整理

????????注:通常標記-清除算法也是需要停頓用戶線程來標記、清理可回收對象的,只是停頓時間相對而言要來的短而已。

????????

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

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

相關文章

windows Socket簡單編程實例

服務端 #include <winsock2.h> #include <string.h> #include <stdio.h> #include <stdlib.h>#pragma comment(lib, "Ws2_32.lib")void error_handing(const char* message) {fputs(message, stderr);fputc(\n, stderr);exit(1); } int mai…

任我行CRM系統存在 SQL注入漏洞[2023-HW]

任我行CRM系統存在 SQL注入漏洞 一、 產品簡介二、 漏洞概述三、 復現環境四、 漏洞復現小龍POC又是一通哈拉少 五、 修復建議 免責聲明&#xff1a;請勿利用文章內的相關技術從事非法測試&#xff0c;由于傳播、利用此文所提供的信息或者工具而造成的任何直接或者間接的后果及…

學習ts(二)數據類型(接口和對象類型、數組類型)

interface 重名會重合到一起 如果兩個interface名稱相同&#xff0c;會把兩個合到一起 重復定義同一個需要類型相同 不能多或者減少屬性 設置任意key 當定義接口返回數據時&#xff0c;我們不確定接口會返回多少&#xff0c;知道所需要的固定屬性&#xff0c;其余屬性可以…

學習筆記十四:K8S最小調度單元POD概述

K8S最小調度單元POD概述 k8s核心資源Pod介紹Pod是什么Pod如何管理多個容器Pod網絡Pod存儲代碼自動發版更新收集業務日志 Pod工作方式自主式Pod控制器管理的Pod(防誤刪除) 如何基于Pod運行應用 k8s核心資源Pod介紹 K8s官方文檔&#xff1a;https://kubernetes.io/ K8s中文官方文…

【博客692】grafana如何解決step動態變化時可能出現range duration小于step

grafana如何解決step動態變化時可能出現range duration小于step 1、grafana中的step和resolution grafana中的 “step” grafana本身是沒有提供step參數的&#xff0c;因為儀表盤根據查詢數據區間以及儀表盤線條寬度等&#xff0c;對于不同查詢&#xff0c;相同的step并不能…

校園外賣小程序怎么做

校園外賣小程序是為滿足校園內學生和教職員工的外賣需求而開發的一種應用程序。它涵蓋了從用戶端、商家端、騎手端、電腦管理員到小票打印、多商戶入駐等多個方面的功能&#xff0c;以下將逐一介紹。 1. 用戶端功能&#xff1a;校園外賣小程序為用戶提供了便捷的訂餐和外賣服務…

Zmq適配Win7 SP0 / Win XP/ Win 2k

1.目的 由于發布版本的libzmq使用了較多新的系統特性&#xff0c;導致在低版本windows平臺上無法使用。 因此&#xff0c;需要對zmq源碼進行修改以適配低版本的系統&#xff0c;如Win7 SP0&#xff0c;Win XP&#xff0c;Win2003等等。 2.Win7 SP0 #if defined ZMQ_HAVE_WIN…

深入理解epoll

文章目錄 概述1. epoll_create - 創建一個epoll實例2. epoll_ctl - 控制epoll實例的事件結構體介紹events取值&#xff1a;data&#xff1a; 聯合體&#xff08;共用體&#xff09;&#xff1a; 3. epoll_wait - 等待事件發生偽代碼總結 概述 在網絡編程中&#xff0c;高效地處…

每天一道leetcode:797. 所有可能的路徑(圖論中等深度優先遍歷)

今日份題目&#xff1a; 給你一個有 n 個節點的 有向無環圖&#xff08;DAG&#xff09;&#xff0c;請你找出所有從節點 0 到節點 n-1 的路徑并輸出&#xff08;不要求按特定順序&#xff09; graph[i] 是一個從節點 i 可以訪問的所有節點的列表&#xff08;即從節點 i 到節…

c++11 explicit關鍵字的作用

explicit 在C中&#xff0c;explicit關鍵字用來修飾類的構造函數&#xff0c;被修飾的構造函數的類&#xff0c;不能發生相應的隱式類型轉換&#xff0c;只能以顯示的方式進行類型轉換。因為無參構造函數和多參構造函數本身就是顯示調用的。再加上explicit關鍵字也沒有什么意義…

?五金件機器視覺定位?并獲取外觀輪廓軟硬件視覺方案

【檢測目的】 五金件機器視覺定位&#xff0c;視覺檢測五金件輪廓并矯正五金件位置進行涂油 【客戶要求】 FOV:540*400mm 【拍攝與處理效圖一】 【拍攝與處理效圖二】 【實驗原理及說明】 【方案評估】 根據目前的圖像和處理結果來看&#xff0c;可以檢測出產品輪廓并進行位置…

HCIP-OpenStack搭建

1、OpenStack概述 OpenStack是一種云操作系統&#xff0c;OpenStack是虛擬機、裸金屬和容器的云基礎架構。可控制整個數據中心的大型計算、存儲和網絡資源池&#xff0c;所有資源都通過具有通用身份驗證機制的API進行管理和配置。管理員也可通過Web界面控制&#xff0c;同時授…

Qt 之 QPushButton,信號與槽機制

文章目錄 前言一、QPushButton二、信號與槽機制總結 前言 一、QPushButton 當我們開發基于Qt框架的圖形用戶界面&#xff08;GUI&#xff09;應用程序時&#xff0c;經常需要在界面上添加按鈕來實現用戶交互。Qt提供了一個名為 QPushButton 的類作為按鈕控件的實現。QPushButt…

基于RoCE的應用程序的MTU注意事項

目錄 基于RoCE的應用程序的MTU注意事項 探測網絡中的MTU設置 概要 原文 MTU測試結果 DOC: CentOS安裝tshark抓包工具 基于RoCE的應用程序的MTU注意事項 原文&#xff1a;https://support.mellanox.com/s/article/MLNX2-117-1682kn InfiniBand協議最大傳輸單元&#xff…

WSL2 Ubuntu子系統安裝OpenCV

文章目錄 前言一、&#xfeff;基本概念二、操作步驟1.下載源碼2.安裝依賴3.運行編譯4.配置路徑 前言 OpenCV用C語言編寫&#xff0c;它的主要接口也是C語言&#xff0c;但是依然保留了大量的C語言接口。該庫也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。這些語…

C#委托事件的區別

在C#中&#xff0c;委托&#xff08;delegate&#xff09;和事件&#xff08;event&#xff09;經常一起使用&#xff0c;但它們之間確實有一些基本的區別&#xff1a; 委托&#xff08;Delegate&#xff09;&#xff1a;委托是一個引用類型&#xff0c;它可以引用一個或多個具…

[python] 安裝numpy+scipy+matlotlib+scikit-learn及問題解決

這篇文章主要講述Python如何安裝Numpy、Scipy、Matlotlib、Scikit-learn等庫的過程及遇到的問題解決方法。最近安裝這個真是一把淚啊&#xff0c;各種不兼容問題和報錯&#xff0c;希望文章對你有所幫助吧&#xff01;你可能遇到的問題包括&#xff1a; ImportError: N…

高并發數據抓取實戰:使用HTTP爬蟲ip提升抓取速度

又到每天一期學習爬蟲的時間了&#xff0c;作為一名專業的爬蟲程序員&#xff0c;今天要跟你們分享一個超實用的技巧&#xff0c;就是利用HTTP爬蟲ip來提升高并發數據抓取的速度。聽起來有點高大上&#xff1f;別擔心&#xff0c;我會用通俗易懂的話來和你們說&#xff0c;讓你…

自定義組件引入使用單標簽還是雙標簽好

在許多前端框架和庫中&#xff0c;自定義組件可以使用單標簽或雙標簽進行引入和使用。讓我為您解釋一下這兩種方式的區別和使用場景。 單標簽&#xff08;Self-closing Tag&#xff09;&#xff1a;使用單標簽來引入自定義組件意味著您在組件的使用中只需要一個標簽&#xff0…

自動切換HTTP爬蟲ip助力Python數據采集

在Python的爬蟲世界里&#xff0c;你是否也被網站的IP封鎖問題困擾過&#xff1f;別擔心&#xff0c;我來教你一個終極方案&#xff0c;讓你的爬蟲自動切換爬蟲ip&#xff0c;輕松應對各種封鎖和限制&#xff01;快來跟我學&#xff0c;讓你的Python爬蟲如虎添翼&#xff01; 首…