国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

GC一覽

Berwin / 1817人閱讀

摘要:每被引用一次,引用次數加一。相反,不再被引用時,引用計數減一。從被稱為的一些對象出發,找到其引用的對象,再到其間接引用的對象,形成一條引用鏈。凡是不在引用鏈里面的對象,被稱為不可達對象,被標記為需要回收。

(我在知乎的專欄文章地址: https://zhuanlan.zhihu.com/p/... )

簡介

C/C++等語言中需要手動管理內存,操作繁瑣,還容易忘記釋放內存。
為了把程序員從這些繁瑣的操作中解放出來,所以引入了GC。
GC的主要工作就是尋找不再需要的對象,釋放其內存。這句話中蘊含著兩個操作:

定位不需要的對象

釋放內存

定位不需要的對象 引用計數 Reference counting

每個對象都有一個變量,記錄了自己被引用的次數。每被引用一次,引用次數加一。相反,不再被引用時,引用計數減一。當引用次數為0的時候,說明對象需要被回收。

優點:實現簡單

缺點:無法解決循環引用

改進:

添加弱引用

用trial deletion解決循環引用

使用tracing GC例如mark-sweep GC輔助

跟蹤 Tracing

基于可達性(reachable)分析。從被稱為GC Roots的一些對象出發,找到其引用的對象,再到其間接引用的對象,形成一條引用鏈。凡是不在引用鏈里面的對象,被稱為不可達(Unreachable)對象,被標記為需要回收。

優點: 目前主流的GC算法,解決了引用計數的問題。
缺點:實現較為復雜

跟蹤算法如何垃圾回收 標記-清除

標記清除算法分為“標記”和“清除”兩個階段:首先標記出需要回收的對象,標記完成之后統一清除對象。它的優點是效率高,缺點是容易產生內存碎片。

復制

它將可用內存容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊用完之后,就將還存活的對象復制到另外一塊上面,然后在把已使用過的內存空間一次理掉。它的優點是實現簡單,效率高,不會存在內存碎片。缺點就是需要2倍的內存來管理。

標記-整理

標記操作和“標記-清理”算法一致,后續操作不只是直接清理對象,而是在清理無用對象完成后讓所有 存活的對象都向一端移動,并更新引用其對象的指針。因為要移動對象,所以它的效率要比“標記-清理”效率低,但是不會產生內存碎片。

總結

標記-整理和復制算法是對標記-清除算法的改進,解決了一些標記-清除算法的缺點。但是并不意味著后兩種算法優于標記-清除算法,只是有所取舍,在工程上權衡。

分代

分代不是一種新的算法,而是對已有的算法的工程上調優。
由于對象的存活時間有長有短,所以對于存活時間長的對象,減少被gc的次數可以避免不必要的開銷。這樣我們就把內存分成新生代和老年代,新生代存放剛創建的和存活時間比較短的對象,老年代存放存活時間比較長的對象。這樣每次僅僅清理年輕代,老年代僅在必要時時再做清理可以極大的提高GC效率,節省GC時間。

實現 歷史

Serial -XX:+UseSerialGC
Parallel -XX:+UseParallelGC -XX:+UseParallelOldGC
CMS -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
G1 -XX:+UseG1GC

CMS

默認gc,分代gc,經典的Eden, Survivor, OldGen, PermGen。

1.8中PerGen被廢棄,部分被MetaSpace代替。

改進的mark-sweep算法。

年輕代使用Parallel,老年代才使用CMS。可以通過參數配置不同的回收器。

初始標記(CMS-initial-mark stop the world) -> 并發標記(CMS-concurrent-mark) -> 重新標記(CMS-remark stop the world) -> 并發清除(CMS-concurrent-sweep) ->并發重設狀態等待下次CMS的觸發(CMS-concurrent-reset)

G1

多個Region, 每個Region都有Eden,Survivor,Old,Humongous。

因為劃分多個Region,所以單個Region可能比較小,對于那些較大的對象用Humongous儲存

對象分配策略
TLAB(Thread Local Allocation Buffer)線程本地分配緩沖區
Eden區
Humongous區
TLAB是為了避免同步的預分配區。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68403.html

相關文章

  • JDK 9 變更一覽

    摘要:概述是一個主要版本的發布這里介紹的是對的特性和增強的實現是的增強提案,包括增強建議和路線圖流程規范請求,描述了針對平臺的建議和最終規范主要變更統一模塊化標準這是全新的編程組件模塊,是可命名的可自描述的代碼和數據集合。 概述 java9是一個主要版本的發布 這里介紹的是Oracle對JDK9的特性和增強的實現 JEP是JDK的增強提案,包括增強建議和路線圖流程 JSR(Java規范請...

    sherlock221 評論0 收藏0
  • jvm體系結構和gc調優(一)

    摘要:做好的優化能大大提升系統的性能體系結構概覽大致流程如圖編譯好的文件通過類加載器從物理結構轉換成運行時數據區結構。后面再寫一篇關于調優的 什么是jvm jvm是java虛擬機的縮寫。所有的java程序都是在jvm上運行的。做好jvm的優化能大大提升系統的性能 jvm體系結構概覽 showImg(https://segmentfault.com/img/bVba5lB?w=1049&h=6...

    wupengyu 評論0 收藏0
  • JDK11新特性解讀

    摘要:千呼萬喚,于正式發布版本即,也就是官方推薦可以廣泛使用的版本,其中發布了包括等個新特性,讓我們一睹為快。一新特性一覽二發布計劃日期階段說明對進入階段的變化會應用越來越嚴格的審查。我們需要支持以保持競爭力并與最新標準保持同步。 千呼萬喚,JDK11于2018-09-25正式發布GA版本(GA即General Availability,也就是官方推薦可以廣泛使用的版本),其中發布了包括ZG...

    piglei 評論0 收藏0
  • jvm原理

    摘要:在之前,它是一個備受爭議的關鍵字,因為在程序中使用它往往收集器理解和原理分析簡稱,是后提供的面向大內存區數到數多核系統的收集器,能夠實現軟停頓目標收集并且具有高吞吐量具有更可預測的停頓時間。 35 個 Java 代碼性能優化總結 優化代碼可以減小代碼的體積,提高代碼運行的效率。 從 JVM 內存模型談線程安全 小白哥帶你打通任督二脈 Java使用讀寫鎖替代同步鎖 應用情景 前一陣有個做...

    lufficc 評論0 收藏0
  • 淺析JVM之內存管理

    摘要:概要要理解的內存管理策略,首先就要熟悉的運行時數據區,如上圖所示,在執行程序的時候,虛擬機會把它所管理的內存劃分為多個不同的數據區,稱為運行時數據區。 這是一篇有關JVM內存管理的文章。這里將會簡單的分析一下Java如何使用從物理內存上申請下來的內存,以及如何來劃分它們,后面還會介紹JVM的核心技術:如何分配和回收內存。 JMM ( Java Memory Model )概要 show...

    Eric 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<