Android中JVM內存回收機制

文章目錄

    • 分代收集算法:
      • 新生代(Young Generation)
      • 老年代(Old Generation)
    • 垃圾回收器:
    • JVM常見三大回收算法:
      • Mark-Sweep(標記清除)
        • 優點:
        • 缺點:
      • 復制算法
        • 優點:
        • 缺點:
      • Mark-Compact(標記壓縮)
        • 優點:
        • 缺點:
    • 四種引用類型:

分代收集算法:

新生代(Young Generation)

回收時先將 Eden 區存活對象復制到一個 Survivor0 區,然后清空 Eden 區,當這個 Survivor0 區也存放滿了時,則將 Eden 區和 Survivor0 區存活對象復制到另一個 Survivor1 區,然后清空 Eden 和這個 Survivor0 區,此時 Survivor0 區是空的,然后將 Survivor0 區和 Survivor1 區交換,即保持 Survivor1 區為空, 如此往復。當 Survivor1 區不足以存放 Eden 和 Survivor0 的存活對象時,就將存活對象直接存放到老年代。當對象在 Survivor 區躲過一次 GC 的話,其對象年齡便會加 1,默認情況下,如果對象年齡達到 15 歲,就會移動到老年代中。若是老年代也滿了就會觸發一次 Full GC,也就是新生代、老年代都進行回收。

老年代(Old Generation)

老年代(Old Generation):在新生代中經歷了 N 次垃圾回收后仍然存活的對象,就會被放到年老代中。因此,可以認為年老代中存放的都是一些生命周期較長的對象。內存比新生代也大很多(大概比例是 1:2),當老年代內存滿時觸發 Major GC 即 Full GC,Full GC 發生頻率比較低,老年代對象存活時間比較長,存活率高。一般來說,大對象會被直接分配到老年代。所謂的大對象是指需要大量連續存儲空間的對象,最常見的一種大對象就是大數組。當然分配的規則并不是百分之百固定的,這要取決于當前使用的是哪種垃圾收集器組合和 JVM 的相關參數。

垃圾回收器:

在這里插入圖片描述

  • 新生代可以適用的垃圾回收器:Serial(串行收集器)、ParNew(并行年輕代收集器)、Parallel Scavenge(并行回收器)
  • 老年代可以適用的垃圾回收器:CMS(并發標記-清除收集器)、Serial Old(串行老年代收集器)、ParallelOld(并行老年代收集器)
  • G1(Garbage First 收集器)和 ZGC(Z Garbage Collector)回收器適用于新生代和老年代混合回收
  • 相互之間有連線的表示可以配合使用,常用組合:Serial+Serial Old, Parallel Scavenge+Parallel
    Old,ParNew+CMS,G1(不需要組合其他收集器)

名詞解釋:

  • 并行回收(Parallel):多條垃圾收集線程并行工作,但此時用戶線程仍然處于等待狀態
  • 串行回收:單個垃圾收集線程工作
  • Minor GC(Young GC):發生在年輕代的GC
  • Full GC:發生在老年代的GC,full GC回收速度一般比Minor GC慢10倍左右,JVM調優也是主要針對Full GC進行調優

JVM常見三大回收算法:

Mark-Sweep(標記清除)

在這里插入圖片描述

優點:

比較簡單

缺點:

容易碎片化(內存空間不連續)

復制算法

在這里插入圖片描述

優點:

效率非常高,速度非常快,因為操作系統對于管理內存來說,清除一塊連續的內存效率很高,速度很快

缺點:

浪費空間

Mark-Compact(標記壓縮)

在這里插入圖片描述

優點:

不會產生碎片

缺點:

效率低

四種引用類型:

  1. 強引用(Strong Reference)

它是最常見的引用類型。當一個對象被一個強引用引用時,即使內存不足時,垃圾回收器也不會回收該對象。只有當該對象的所有強引用都被解除后,垃圾回收器才會回收該對象。強引用的應用場景通常是在對象的生命周期內都需要引用該對象的情況。

  1. 軟引用(Soft Reference)

當一個對象如果只有軟引用,只有當系統內存不足時,垃圾回收器才會回收該對象。軟引用通常用來實現緩存或者高速緩存,當內存不足時可以釋放一些緩存的對象。

  1. 弱引用(Weak Reference)

在面試過程中,很多面試者經常會將弱引用和軟引用這兩者搞混,其實從名字上可以看出,弱引用是比軟引用更弱的一種引用類型,當垃圾回收器掃描到只具有弱引用的對象時,無論當前內存是否不足,都會對弱引用對象進行回收。

  1. 虛引用(Phantom Reference)

虛引用并不會對所指向的對象生命周期產生任何影響,也就是對象還是會按照它原來的方式被垃圾回收器回收,虛引用本質上只是一個標記作用,用來跟蹤對象被垃圾回收的活動。

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

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

相關文章

ubuntu下交叉編譯安卓FFmpeg 和 官方指導鏈接

將之前的編譯方法在此記錄 Linux系統:Ubuntu 18.04.6 LTS 交叉編譯工具鏈:gcc-aarch64-linux-gnu gaarch64-linux-gnu ffmpeg版本:5.1.3 1.下載源碼 ffmpeg官網:https://ffmpeg.org/download.html#releases 下載完成后&#x…

Edge瀏覽器“此頁存在問題”解決思路

Edge瀏覽器顯示“此頁存在問題”解決思路 大家平時使用Edge瀏覽器時,是否和我一樣會突然出現“此頁存在問題”的情況? 經過百度查詢后我找了一種情況和解決辦法,能夠大大減少這類問題的出現。出現“此頁存在問題”可能是因為之前使用過軟件…

每天一個數據分析題(三百四十一)

如何獲取更多優質流量是電商行業中重要課題,下列哪些屬于流量類指標 A. 平均訪問深度 B. 跳失次數 C. 瀏覽量 D. 客單價 數據分析認證考試介紹:點擊進入 題目來源于CDA模擬題庫 點擊此處獲取答案

Linux基礎命令[27]-gpasswd

文章目錄 1. gpasswd 命令說明2. gpasswd 命令語法3. gpasswd 命令示例3.1 不加參數3.2 -a(將用戶加入組)3.3 -d(從組中刪除用戶)3.4 -r(刪除組密碼)3.5 -M(多個用戶一起加入組)3.6 …

React中 將UI 視為樹

當 React 應用程序逐漸成形時,許多組件會出現嵌套。那么 React 是如何跟蹤應用程序組件結構的? React 以及許多其他 UI 庫,將 UI 建模為樹。將應用程序視為樹對于理解組件之間的關系以及調試性能和狀態管理等未來將會遇到的一些概念非常有用。…

Python教程:使用Python和PyQt編寫進制轉換器工具

1.介紹 在現代計算中,進制轉換是一項常見且重要的任務。為了簡化這個過程,我們也可以利用Python和PyQt自己寫一個直觀且易于使用的進制轉換器工具。這個工具將支持二進制、八進制、十進制和十六進制的相互轉換,并提供良好的用戶界面和交互體…

Java設計模式(23種設計模式 重點介紹一些常用的)

創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。行為型模式,共十一種:…

MySQL---函數與約束

目錄 一、函數 1. 字符串函數 2. 數值函數 3. 日期函數 4. 流程函數 5. 總結 二、約束 1. 概述 2. 約束演示 3. 外鍵約束 3.1 添加外鍵 3.2 刪除外鍵 3.3 外鍵刪除更新行為 4. 總結 一、函數 1. 字符串函數 命令如下所示: -- concat select concat("Hel…

蘋果CMS:如何去掉首頁幫助提示信息

首先我們安裝好蘋果CMS,未安裝的可以參考蘋果cms:介紹及安裝 安裝好之后我們需要進入模版設置,可能對于剛剛接觸CMS框架的朋友是不清楚地址的: https://www.yourweb.com/admin_login.php/admin/mxpro/mxproset 其中【yourweb】…

愛設計AiPPT.cn趙充:營銷工作的AI進化

愛設計&AiPPT.cn是一家 AIGC 數字科技企業,致力于打造「下一代個人與組織的 Ai 工作站」 。目前旗下產品包括AiPPT.cn、愛設計AIGC 內容中臺、365 編輯器、愛設計在線設計工具、AiH5 等超過 10 余款應用 AI 能力的內容創作工具。日前,愛設計&AiP…

python的協程異步

參考資料 https://blog.csdn.net/qq_43380180/article/details/111573642?spm1001.2014.3001.5506 協程的概念 指的是在一個線程中,可以在某個地方掛起的特殊函數,并且可以重新在掛起處繼續運行。協程不是進程,也不是線程。 進程 VS 線程…

dcache-android框架中的設計模式詳解

引言:孤獨的人喜歡深夜,多情的人喜歡黃昏。幸福的人喜歡陽光,傷心的人偏愛風雨。 眾所周知,dcache-android是本人一行一行代碼手寫出來的Android數據緩存框架,寫了好幾年了,雖然不是每天寫,但一…

【go從入門到精通】精通并發編程-使用扇入扇出提升多個通道之間傳遞數據的效率

在并發編程領域,Golang 作為一種擅長處理并發的編程語言而脫穎而出。 Go 并發模型的一個關鍵組件是通道,它允許 goroutine 進行通信并同步其工作。在這里,我們將探討在 Go 中的多個通道之間傳遞數據的技術。當需要協調不同 goroutine 之間的工作并管理數據流時,這非常有用。…

TypeScript-類型斷言

類型斷言 當開發者比TS本身更清楚當前的類型是什么,可以使用斷言(as)讓類型更加精確和具體 const _link document.getElementById(link) console.log(_link.href) // 出錯了,如下圖 const _link document.getElementById(link) as HTMLAnchorElement…

【三數之和】python,排序+雙指針

暴力搜索3次方的時間復雜度,大抵超時 遇到不會先排序 排序雙指針 上題解 照做 class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:res[]nlen(nums)#排序降低復雜度nums.sort()k0#留兩個位置給雙指針i,jfor k in range(n-2):if nums[k]…

【再探】Java—泛型

Java 泛型本質是參數化類型,可以用在類、接口和方法的創建中。 1 “擦除式”泛型 Java的“擦除式”的泛型實現一直受到開發者的詬病。 “擦除式”的實現幾乎只需要在Javac編譯器上做出改進即可,不要改動字節碼、虛擬機,也保證了以前沒有使…

光伏電站在線監測智能診斷系統:開啟無人值守新紀元

光伏電站在線監測智能診斷系統:開啟無人值守新紀元 大家都知道光伏電站是通過汲取著太陽的光芒,為人類提供源源不斷的電能源。然而,隨著光伏電站規模的擴大和復雜性的增加,如何有效提高發電效率、減少人工維護成本,實…

YOLOV5算法多目標檢測系統

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 隨著計算機視覺技術的飛速發展,目標檢測已成為許多實際應用場景中的關鍵技術&…

AWS存儲之 Storage Gateway

AWS Storage Gateway是一項混合存儲服務,它允許您在本地環境和AWS云之間無縫地集成存儲解決方案。它提供了一種簡單、安全地方式,讓您可以將本地應用程序連接到云存儲服務,如Amazon S3、Amazon Glacier、Amazon EBS等。 比如一個公司如果想將…

數據結構之二叉樹的超詳細講解(2)--(堆的概念和結構的實現,堆排序和堆排序的應用)

個人主頁:C忠實粉絲 歡迎 點贊👍 收藏? 留言? 加關注💓本文由 C忠實粉絲 原創 數據結構之二叉樹的超詳細講解(2)--(堆的概念和結構的實現,堆排序和堆排序的應用) 收錄于專欄【數據結構初階】 本專欄旨在分享學習數據結構學習的一點學習筆記…