關於垃圾回收的一些基本原理及技術解析
關於垃圾回收的一些基本原理及技術解析
什麼是垃圾,為什麼要垃圾回收?
垃圾回收是很大一塊,在java虛擬機器一些資料描述中,jvm大致幹三件大事兒,1>載入class 2>分配儲存空間 3>執行垃圾回收;可見垃圾回收在高階語言中所佔的分量。(不好意思,扯遠了~),簡單點兒說就是:在程式執行時刻,產生的一直未能刪除的或不能被引用的物件資料稱之為垃圾,如果一直未能通過有效的方式回收會導致記憶體洩露(通俗點就是記憶體撐爆了).
關於人工回收的一些問題:
在C或C++語言中,程式設計師可顯示地安排資料回收,當然在理想的情況下 任何不會再被訪問的的儲存都應該會被刪除,同樣,任何可能還會被引用的儲存物件都不能被刪除。但事實上,由於本身的回收困難之處以外還存在不少技術難點。簡單點兒說就是 A>如果一直未能刪除不能被引用的記憶體資料會使0記憶體佔用過大,導致記憶體洩露 B>如果程式引用了一個已經被刪除(回收的)的資料 會導致空指標引用
垃圾回收的一般要求:
基本要求是型別安全,但不是所有語言都適合進行自動垃圾回收。為了使垃圾回收器正常工作,它必須知道給定的資料元素或元素的分量(是否或可用作)一個指向某塊已分配儲存空間的指標。但是資料元素或分量在一些高階語言中又是型別不安全的,比如在C或C++中可以對儲存地址進行任意操作。
垃圾回收的效能代價:
A>執行時間: 垃圾回收的速度可能較慢,容易增加一個應用程式的總執行時間
B>儲存空間使用 需要避免記憶體碎片,極大地利用可用記憶體空間
C>停頓時間 垃圾回收過程會在沒有任何預警的情況下突然啟動,導致應用程式突然停頓,所以縮小停頓時間很重要
D>程式區域性性 由於垃圾回收控制了資料的放置,因此影響了將要執行的程式碼的資料區域性性。此時需要通過釋放或複用空間改善時間區域性性,通過重新放置移動一起使用的資料改善空間區域性性
垃圾回收的一般方法:
垃圾回收分為:A>基於引用計數的垃圾回收 B>基於跟蹤的垃圾回收 C>短停頓式垃圾回收
引用式的垃圾回收:
概述:對應每個物件都維護一個物件的引用計數,當計數為0的時候,該物件會被確認為垃圾隨即被刪除。
缺點:它不能回收不可達的迴圈資料結構,因為每次引用賦值都會增加一個額外運算,遂開銷比較大。
跟蹤的垃圾回收:
概述:標記所有可達物件並移入空閒列表,然後清掃整個堆區,此型別的垃圾回收會週期地(空閒空間耗盡或空閒空間低於某個閥值時)執行
缺點:很難找到堆區的不可達物件,導致清掃的代價較大,清掃時程式會全面停頓
短停頓式垃圾回收:
概述:每次只做部分垃圾回收工作,從而減少一次停頓的長度,按時間(增量式回收)或空間(部分式回收)分割回收任務
缺點:增量式垃圾回收在回收之後會留下漂浮垃圾,部分式垃圾回收會造成停頓較長或回收無效垃圾
原創部落格,轉載請註明出處:http://cnblogs.com/funnyzpc
funnyzpc@gmail.com
相關文章
- 關於JVM的垃圾回收JVM
- 垃圾回收技術的發展(轉)
- ☕[JVM技術指南](3)垃圾回收子系統(Garbage Collection System)之垃圾回收器JVM
- 關於UI自動化技術及測試的一些看法UI
- 關於jvm的永久代會發生垃圾垃圾回收嗎?進來便知JVM
- ☕[JVM技術指南](2)垃圾回收子系統(Garbage Collection System)之常見的垃圾回收演算法JVM演算法
- 垃圾回收(一)【垃圾回收的基礎】
- 關於Java垃圾回收被誤解的7件事Java
- 關於量子技術的一些概念糾正
- 關於相機相簿的一些實用技術
- 關於IT,關於技術
- 關於lua垃圾回收是否會執行__gc函式呢?GC函式
- JavaScript 記憶體管理及垃圾回收JavaScript記憶體
- 關於技術人員自身能力提升的一些思考
- 關於一些類病毒隱藏技術的設想 (轉)
- JVM 垃圾回收演算法和垃圾回收器JVM演算法
- 技術分享丨 關於MySQL binlog解析那些事MySql
- JVM 中的垃圾回收JVM
- JavaScript 中的垃圾回收JavaScript
- Java中的垃圾回收Java
- JVM垃圾回收JVM
- javascript垃圾回收JavaScript
- golang垃圾回收Golang
- jvm - 垃圾回收JVM
- Java垃圾回收Java
- JavaScript 垃圾回收JavaScript
- [JVM]垃圾回收JVM
- ☕[JVM技術指南](1)垃圾回收子系統(Garbage Collection System)之回收標記和物件引用的介紹JVM物件
- 關於技術的選型
- 關於技術分享的思考
- 有關技術管理的一些思考
- 關於技術方案
- 關於技術文件
- 關於尋路演算法的一些思考(12):AI 技術演算法AI
- JVM中G1垃圾回收器詳細解析JVM
- PHP的垃圾回收機制-回收週期PHP
- 智慧垃圾分類回收系統開發,需要哪些功能和技術點?
- 依然順滑!Dragonwell 11如何改造全新垃圾回收器ZGC? | 龍蜥技術GoGC