亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 5685 | 回復(fù): 10
打印 上一主題 下一主題

研究了幾天垃圾回收算法 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-11-19 22:35 |只看該作者 |倒序瀏覽
還是沒找到滿意的答案,

看來垃圾回收問題,是個世界性難題。

Cuer有創(chuàng)新的想法嗎?

論壇徽章:
0
2 [報告]
發(fā)表于 2011-11-19 23:31 |只看該作者
本帖最后由 xyfree 于 2012-01-21 04:08 編輯

論壇徽章:
0
3 [報告]
發(fā)表于 2011-11-19 23:45 |只看該作者
代碼沒有,只有一些想法,比如:

1. 先用引用計數(shù)回收垃圾

2. 引用計數(shù)回收不掉的,通過變量的訪問作用域回收(沒有任何變量可訪問到的內(nèi)容,肯定算垃圾)

3. 上面兩步都回收不到的,再通過搜索能否被root引用到的方式回收。

1,2能回收掉很大一部分。但是3仍舊不會有很即時的效率表現(xiàn)。

樓上有好想法沒?

論壇徽章:
0
4 [報告]
發(fā)表于 2011-11-20 00:13 |只看該作者
你的垃圾回收器主要應(yīng)用場景是什么呢?

如果你是在想給C/C++設(shè)計垃圾回收器,我就不大看好哦

ps.
通用的垃圾回收我也不看好哦

論壇徽章:
0
5 [報告]
發(fā)表于 2011-11-20 00:23 |只看該作者
本帖最后由 xyfree 于 2012-01-21 03:58 編輯

論壇徽章:
0
6 [報告]
發(fā)表于 2011-11-20 00:31 |只看該作者
回復(fù) 5# xyfree


    引用計數(shù)問題很多,以致于現(xiàn)代的stl庫都不用引用計數(shù)了,特別是在多線程環(huán)境的問題。加鎖性能太低,還不如拷貝,不加鎖又不安全。

所以不用這個妖蛾子

論壇徽章:
0
7 [報告]
發(fā)表于 2011-11-20 01:56 |只看該作者
本帖最后由 xyfree 于 2012-01-21 03:58 編輯

論壇徽章:
3
15-16賽季CBA聯(lián)賽之山東
日期:2016-10-30 08:47:3015-16賽季CBA聯(lián)賽之佛山
日期:2016-12-17 00:06:31CU十四周年紀(jì)念徽章
日期:2017-12-03 01:04:02
8 [報告]
發(fā)表于 2011-11-20 09:04 |只看該作者
回復(fù) 6# walleeee


    我沒弄明白引用計數(shù)跟多線程環(huán)境和stl庫有什么關(guān)系。Android系統(tǒng)中提供了一個Binder框架用來做跨進(jìn)程通信和遠(yuǎn)程調(diào)用(Remote Procedure Call),這個構(gòu)架的最終基類就是一個引用計數(shù)類,整個構(gòu)架的繼承體系均虛繼承自該類。進(jìn)程之間的通信,通過進(jìn)程中的線程引用一個代理對象,該代理對象就是用引用計數(shù)管理的。

論壇徽章:
0
9 [報告]
發(fā)表于 2011-11-20 10:24 |只看該作者
我認(rèn)為,搞垃圾回收的語言就不應(yīng)該保留內(nèi)存分配接口,甚至根本就不要提供任何資源分配相關(guān)接口。


在這個基礎(chǔ)上,可以這么做:

1、任何語言內(nèi)置小/簡單對象默認(rèn)棧上分配;大對象則用分配于棧上的句柄和它在堆上的實際地址關(guān)聯(lián)
2、如果對象return給外部,仍然用棧返回,轉(zhuǎn)移控制權(quán)給外部(也就是拷貝構(gòu)造于外部調(diào)用者的棧上)
3、如果對象傳遞給另外的線程,拷貝構(gòu)造于對應(yīng)線程的棧上(沒錯,不支持線程共享局部變量)
4、線程間共享數(shù)據(jù)必須是全局?jǐn)?shù)據(jù),或者必須用export聲明;這種數(shù)據(jù)支持自動加鎖(如果需要考慮效率,用traits選擇即可),并且在程序退出時才會回收
5、變量賦值語義上等于引用。這種引用只需要為有名局部變量保留引用計數(shù)功能,即可實現(xiàn)自動回收。
賦值等于拷貝實現(xiàn)起來更簡單,但效率不高。引用方案效率高,但機(jī)制較為復(fù)雜。
6、現(xiàn)在,資源管理就是局部對象管理,或者說局部對象作用域的管理。


至于所謂的對象內(nèi)部的對象之類問題,純粹是在垃圾回收語言里保留new之類東西導(dǎo)致的復(fù)雜化。
因為對象之內(nèi)有對象,說白了還是一個復(fù)雜的局部對象。這個局部對象銷毀時,直接刪除內(nèi)部的對象樹即可——這就是所謂的基于引用關(guān)系的垃圾回收。
區(qū)別是,利用局部對象作用域來管理時,這個垃圾回收是實時的、等價于引用計數(shù)的,不需要額外的“幺蛾子”概念來摻乎的;不過,實時的回收效率可能比不上暫時不回收、攢多了一起回收效率高,這就是定時GC。

——碼完字一看,這不差不多就是python嘛

論壇徽章:
0
10 [報告]
發(fā)表于 2011-11-20 11:02 |只看該作者
的確沒有完美的解決方案,所以要在靈活性上加一些限制,或者制定更細(xì)致的規(guī)則,在一個特定的模式下,提一個實用的解決方案。

為什么java的垃圾收集算法這么成熟,而C++卻沒有太多成熟的庫?

個人覺得最主要的原因是,C++中地址和整數(shù)可以隨意轉(zhuǎn)換,而java中從語法上限制了“地址”的賦值范圍。(java中沒有指針,但實質(zhì)上是所有東西都是指針,且不能強(qiáng)制類型轉(zhuǎn)換)。java中追溯一個對象有沒有被引用相對容易,將全局變量和各個線程的函數(shù)調(diào)用棧中的變量遍歷一遍即可。

引用計數(shù)其實性能并不低,在某些平臺上,可以不用鎖,而是用原子操作來實現(xiàn)。關(guān)鍵是要將引用計數(shù)作為一個強(qiáng)制規(guī)范,還要處理一些環(huán)形引用等。

或者像apr庫那樣,設(shè)定一個局部范圍和對應(yīng)的pool,范圍內(nèi)都從pool中申請,出了范圍就直接把pool釋放,雖然限制很大,但其實工程上足夠用了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP