欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

是手動管理與自動垃圾回收相結合的

錢多多2年前22瀏覽0評論

是手動管理與自動垃圾回收相結合的?

Rust和Objective-C內存管理

據蟲蟲所知目前有兩種語言可以做到這種權衡,一種是Rust,一種是OC。但基本上都不是主流。

rust通過所以權和生命周期方式動態管理內存,保證運行時100%內存安全,需要手動時候用unsafe強制標記。

Objective-C中有mrc和arc兩種內存管理機制:MRC(手動計數,MannulReference Counting)和 ARC(自動計數Automatic Reference Counting),分別提供對內存的手動和自動管理,來滿足不同的需求。

主流的內存管理和GC垃圾回收各種現代語言都有一套自己的gc處理辦法,雖然各有各的招,但是基本上是基于三種基本方法:引用計數、復制收集和標記清除。下面一一介紹下。引用計數

這是一種比較方便,有效的gc管理方法。現代絕大多數語言都是基于這種方法,包括不限于python、php、perl、ruby和js都是。

引用計數的基本原理就是對程序中所有對象(比如變量等)有個全局表記錄其被引用的次數,當對其引用釋放時候計數就減少,直到計數為零,則其會被釋放。

引用計數優點實現簡單,可即時回收垃圾。缺點是容易形成循環引用,導致永遠釋放不了,所以現代語言gc主要是基于引用計數,然后引入一些改進算法解決循環引用的問題。

復制收集

這種算法是把內存分兩塊,一塊正常使用,當需要gc時候,將第一塊上還在使用的對象復制到另一塊,然后將第一塊內存全部釋放,這種方法防止了對象存活檢查的遍歷,可提高效率。

標記——清除

這是出現最早應用最廣的gc方法,也可以說gc普遍原理就是這種方法。標記清楚發有兩個階段,標記階段需要標記回收的對象;回收階段有gc統一回收。

這種方式問題,效率很差還會產生大量內存碎片。

實際上java的gc綜合了2,3方法還做了其他大量的改進,可以說java gc是最先進的gc方法。但是由于底層jvm限制,不能用引用計數的方法,所以還是有一些問題的。

業界普遍看法也是,任何一種GC算法用引用計數和跟蹤回收結合的話才是最有效率的,最實用的。