討論區快速選單
知識庫快速選單
傑米的攝影旅遊筆記 掌握Salesforce雲端管理秘訣 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
評Garbage Collection機制
更改我的閱讀文章字型大小
作者 : jonay(jonay) VC++優秀好手C++ Builder優秀好手C++優秀好手貼文超過500則
[ 貼文 887 | 人氣 8025 | 評價 5030 | 評價/貼文 5.67 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/3/27 下午 03:10:13
這不是批評Java和CSharp的好壞
只針對GC的有感而發
先說一個故事

從前有一個母親生了一個孩子
每天照顧的無微不至
她每隔一段時間就會去查看小孩的屁股有無大便
如果有,就會清除乾淨
因此無論刮風、下雨、打掃、洗衣
母親都會做相同的動作(看起來好偉大)
甚至是正在做菜時....
如果清完後又沒有洗手....
....噁

歲月如梭
30年後,孩子長大了
正在與女友交往....親熱時
母親很親切的跑過來,查看她孩子的屁股有無大便

孩子50歲時,嚴正的對母親抗議
媽,我長大了,絕不會在褲子上大便
母親很慈詳的說:嗯,孩子我知道了。
一邊脫下孩子的褲子仔細的檢查

故事說完了,也許很好笑
但問題很嚴重

GC並不是不好,但應該做成可選項
而不是強迫所有人接受它(我並不清楚是否有改進)
問題點在於,它會延遲Bug發生的時間,讓人沒法針對問題立即反應

而自已配的記憶體,自已回收也是天經地義的事
母親也可專心做自已的事而不受干擾
如果初學者不將基礎打好(自已的屁股自已擦)
終有一天會連除錯的能力也喪失
作者 : smallwhite(小白)
[ 貼文 150 | 人氣 6678 | 評價 300 | 評價/貼文 2 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/3/27 下午 03:54:10
雖然我很常用c++,但我認為gc這件事最好能不要可調,不然有的函式庫是有GC有的沒有,這樣編譯時要怎麼辦?函式庫要GC,引用的程式不要GC採取使用者自己放,那引用的程式的資源的人DEBUG時怎麼知道資源是被GC還是自己釋放?會不會程式員認為是自己放的,其實是GC幫它放的,因為無法在無GC下測試(因為引用了需要GC的函式庫),這樣在資源釋放部分還是會隱含BUG...
如果GC可調,這樣每個函式庫就要分GC版和自己釋放版,這樣CODE會變多,而且像JAVA本身沒解構式的機制,硬要改成無GC可能會失去它簡單的優勢。
就像你所說的GC確實可能造成延遲Bug發生的時間,但不要忘了它帶來的好處,那就是CODE會變少(有句話是這麼說的,CODE的量越少BUG通常也越少)。
自己釋放也有自己釋放的好處,這或許是C++為什麼到現在還是不強迫使用GC機制的原因...
作者 : pantc328(好說) C#優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 894 | 人氣 14154 | 評價 3400 | 評價/貼文 3.8 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/3/29 上午 11:43:04
Rule is rule .東西不是我們作的,如果你可以,你就自己去寫的的程式系統,寫自己的作業系統.
煩惱,如果可以解那就叫煩惱.如果不能解就不會是煩惱了.
"面對他,接受他,處理他".
作者 : fcwang(fortran) 程式設計甘苦談優秀好手貼文超過200則
[ 貼文 231 | 人氣 2831 | 評價 2440 | 評價/貼文 10.56 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/4/26 下午 05:42:16
我要說一個恐龍時代(1977年)程式設計真實的故事, 比媽媽幫小孩檢查屁屁更值得讓各位看官回味.

1977年 我剛自學校畢業進入職場,當個Fortran程式設計師, 那時我可以使用的是IBM 1130電腦, 記憶體是Core memory 16K word(2 bytes / Word). 這可不是初階的PC, 因為PC那可是我工作七,八年後才出現的事.

如果依現在的程式設計方法, 不會考慮記憶體的限制. 我設計的程式是應用於工程設計, 大約數百K Byte 的大小. 可是偏偏那時候Core memory 大概不比金子便宜, 如何讓幾百K Byte 的程式, 設計在32K Byte(16K word)的電腦上(扣除作業系統程式, 僅剩一半的記憶體可用)執行, 可就是我這個程式設計師要處理的事. 觀念就是採用 Virtual Storage 的觀念, 我必須將程式切成一個主控程式與數十段小程式, 由主控程式呼叫Page-in 與Page-out之system call, 將各段小程式依據設計的順序Swap in, Swap out 來執行.

各位程式設計的朋友們, 我在三十多年前因必須考慮記憶體的限制, 設計程式的方法, 現在應該沒有人認為這是設計師要處理的事.

Garbage Collection 係因不少Programmer 對不再使用的Memory Block 沒有執行Memory deallocation的疏忽而造成 Memory Leakage 的問題. 我當PM時, 每年總會有幾次因Memory Leakage 的災害在半夜北被叫醒, 被罰站. 所以 .Net將Garbage Collection列為標準功能, 讓程式設計師不再處理Memory deallocation的德政, 相對應於Virtual Storage的作業系統, 讓程式設計師不再處理受Memory 限制的程式設計的問題.

各位程式設計的朋友們, Garbage Collection在二十年後也會是像是我告訴諸位這樣的 恐龍時代故事.
作者 : terenas(風) 貼文超過200則
[ 貼文 490 | 人氣 7440 | 評價 680 | 評價/貼文 1.39 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/4/26 下午 11:39:49
說句實在話, 有GC 就代表你可以都不用管? 我就看到某銀行的系統, JAVA 寫的web service
不定期的給你掉下來了, why? memory leak, JVM 突然無法maintain 了, core dump
後來換一版新的JVM, 唉好很多了, 沒掉下來了, but 有交易有去無回, 或連去都去不成,
why, 同樣的問題, JVM 強壯了, 只是不要掉下來而已, AP 自動被切掉.
天底下, 除非你的程式是可以開開關關的, 就可以不用管, 否則, 長期的, 工
時長的server 型critical Application, 功力馬上顯現, 懶習慣的人馬上可以閃一邊涼快去了.
因為, 出錯會死人的(當掉多幾次可不只罰站囉)
作者 : fcwang(fortran) 程式設計甘苦談優秀好手貼文超過200則
[ 貼文 231 | 人氣 2831 | 評價 2440 | 評價/貼文 10.56 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/4/27 下午 07:17:18


>天底下, 除非你的程式是可以開開關關的, 就可以不用管, 否則, 長期的, 工
>時長的server 型critical Application, 功力馬上顯現, 懶習慣的人馬上可以閃一邊涼快去了.
>因為, 出錯會死人的(當掉多幾次可不只罰站囉)
>
Terenas 説的現象是對的-- 工時長的server 型critical Applications 仍然會發生Memory Leakage 的問題.

但是將Applications程式 shutdown後,重新起動, 就可以釋放出堆積不用的Memory Block. 因此在某些場合, 可以寫個 Shell Program定期(或視Memory Utilization 的情形)將 Applications程式shutdown, 再重新起動, 算是治標的權宜之計. 這樣PM 就可以減少被罰站的次數.
作者 : terenas(風) 貼文超過200則
[ 貼文 490 | 人氣 7440 | 評價 680 | 評價/貼文 1.39 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/4/27 下午 11:15:20

>
>
>>天底下, 除非你的程式是可以開開關關的, 就可以不用管, 否則, 長期的, 工
>>時長的server 型critical Application, 功力馬上顯現, 懶習慣的人馬上可以閃一邊涼快去了.
>>因為, 出錯會死人的(當掉多幾次可不只罰站囉)
>>
>Terenas 説的現象是對的-- 工時長的server 型critical Applications 仍然會發生Memory Leakage 的問題.
>
>但是將Applications程式 shutdown後,重新起動, 就可以釋放出堆積不用的Memory Block. 因此在某些場合, 可以寫個 Shell Program定期(或視Memory Utilization 的情形)將 Applications程式shutdown, 再重新起動, 算是治標的權宜之計. 這樣PM 就可以減少被罰站的次數.
某些工作可以給你這樣有事沒事, 摘個好日子, 停機個一下, 但要記住我講的是Bank, 除非金資說停, 或整個銀行有什麼大事要停,
不然, 就罰站吧.
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/4/28 上午 06:04:27
>各位程式設計的朋友們, 我在三十多年前因必須考慮記憶體的限制, 設計程式的方法, 現在應該沒有人認為這是設計師要處理的事.

雖然不多, 但也不代表不需要, 只是考慮這部份的人愈來愈少.

以前是RAM貴而少, 需要斤斤計較, 就像CPU很慢一樣, 常常要去調clock來加速. 現今CPU快太多了, 已不太需要去調clock, RAM因為暴增, 也讓許多人愈來愈不注重這部份. 但將來的資料成長率會超乎想像, 巨量資料如果成為常態, 我想大概人人逃不了又要考慮這部份了.

我從DOS時代體會到記憶體不足的困擾, 所有資料大小必定要設計的剛剛好, 幾個位元就用幾個位元, 但也限制了未來的擴展性. 到了Windows, 就開始儘量放寬限制以備擴展, 但又嘗到巨量資料帶來的困擾. 所幸後來有c++ class的方便, 設計時儘量縮到最小, 需要時再放寬一個byte, 只需改一個class即可. 但如果資料量大到無法容納於記憶體中時, 又要另行考慮了. 例如只有1M筆資料, 處理上還容易, 如果是128M筆(1億多筆), 如果每筆4 byte, 就要佔512MB, 再加上額外資訊, 隨便就超過2GB, 甚至4GB以上. 目前也正在思考不斷考進中, 如何在維護性/空間效率(包括ram&disk)/時間效率中求到最佳解, 確實還蠻困難的. 但利用class的特性, 仍然可以鎖在一個class中, 不必去更動其他的程式, 維護上還算蠻方便的.

附有GC的語言, 目前確實不符個人需要, 但有了GC的幫助, 確實可增加一些程式語言處理的方便性. 個人不認為非得將GC做成選項, 應該由系統自行去判斷. 有GC的語言, 多半是為了共通性(跨平台)或方便性而設計, 如果是考慮效率性, 那麼就不該用這類的程式語言. 就像perl再弄個GC選項, 實在是怪怪的. 每個語言有各自的特性, 程式設計師應該視情況去善用這些語言, 以最快的方式達到最佳的效果. 例如VC++設計UI很有彈性, 但寫起來實在太費工, 尤其是呼叫COM元件的部份, 如果換個VB, 寫起來就會快很多, 真的需要效率性時, 也可用VC++寫dll, 給VB呼叫. 當然這裡的VB/VC++, 都可以換成其他語言, 主要是視"情況"而定. C#/Java/Perl/ASP都好, 要認清它們的特性, 然後善用於工作中, 並不是一成不變, 只學一種就好的.

其實我一直在強調, 程式語言只是一種工具. 你總不可能拿著電鑽去挖馬路吧? 熟悉並善用工具, 是程式設計師最基本的要求. 產業知識(如企業的產銷人發財,知識管理,專利,法律常規等等)/資訊知識(資料庫,繪圖學,保密學,人工智慧等等)/設計知識(軟體工程,品質保證,演算法等等), 才是程式設計師真正的價值所在, 這也是技工跟技師的主要分別. 那怕你Windows系統鑽得多深, 頂多也只能算是個資深技工, 如果換個工作, 變成用Linux, 那就一文不值了.

或許是因為資訊業裡, 語言工具與系統函數變化得太快, 搞得大家學這些就人仰馬翻了, 最後變成討論的主流. 但個人還要強調一下, 學這些只是末端的基礎. 平常只需保持會或了解個大概就好, 但要能知道相關資料在何處, 需要時再去找來精入即可, 這樣才不會花過多的精力去學一堆不必要又容易過時的東西. 但前述的三樣知識能學多一點是一點, 因為學了後, 一生皆可用的, 不會因工具的改變而消逝, 很划算吧... ^^"

最後要再強調的一點是, 前述的需時再精深的方法, 建築在你的學習力上. 一般以一個月內為標準, 如果需時三個月以上, 建議還是平常就要專研, 免得到時措手不及.
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/4/28 上午 06:18:29
>某些工作可以給你這樣有事沒事, 摘個好日子, 停機個一下, 但要記住我講的是Bank, 除非金資說停, 或整個銀行有什麼大事要停,
>不然, 就罰站吧.

軟體restart是一個很常用的技巧啊. 雖然restart過程只需不到1秒, 但critical的工作, 如何在這不到1秒間又能順利轉移, 就看你如何規劃了.

又, 軟體的memory leak, 未必來自於軟體本身. 你週邊使用的dll (包括3rd party的), 甚至使用的資源(包括資料庫等)也都可能產生. 常時間做service的, 最好規劃軟體自我restart機制, 比較不會出問題.
作者 : terenas(風) 貼文超過200則
[ 貼文 490 | 人氣 7440 | 評價 680 | 評價/貼文 1.39 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/4/28 上午 10:32:40

>>某些工作可以給你這樣有事沒事, 摘個好日子, 停機個一下, 但要記住我講的是Bank, 除非金資說停, 或整個銀行有什麼大事要停,
>>不然, 就罰站吧.
>
>軟體restart是一個很常用的技巧啊. 雖然restart過程只需不到1秒, 但critical的工作, 如何在這不到1秒間又能順利轉移, 就看你如何規劃了.
>
>又, 軟體的memory leak, 未必來自於軟體本身. 你週邊使用的dll (包括3rd party的), 甚至使用的資源(包括資料庫等)也都可能產生. 常時間做service的, 最好規劃軟體自我restart機制, 比較不會出問題.
我說過了,Java寫的, 沒dll!!
重起web service 就是最簡單的, 也要包括application server, 就是shutdown 就花超過一分鐘了. 別的就不用說了.
 板主 : Jammy , simula
 > 一般討論區 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 一般討論區 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
一般討論區
1 青衫 5370 
2 HKLN.net 1370 
3 冼鏡光 650 
4 simula 610 
5 joe 560 
6 DEMO999 520 
7 小朱 490 
8 jonay 480 
9 BlueTulip 460 
10 Jammy 370 
一般討論區
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625