→ sayya2311:java.lang.Runtime.gc(); 05/24 21:44
→ Lordaeron:樓上的,你有看過文件嗎? 讀懂嗎? 05/24 22:01
推 sayya2311:為何有此問? 05/24 22:09
→ Lordaeron:請你看看就知囉. 05/24 22:12
→ sayya2311:什麼跟什麼? 05/24 22:13
→ sayya2311:gc.htm 05/24 22:15
→ james732:Runtime.gc(); 只是建議而沒有強制性 05/24 22:23
→ james732:並沒辦法真的控制『某一個時間』這個問題 05/24 22:24
→ choufeng:樓上正常. 調用gc() 只能"建議"VM這個時間可以作GC 05/24 22:26
→ choufeng:但實際上GC的時間點還是由VM自行決定 05/24 22:26
→ choufeng:第一行打錯 是"樓上正解" @@ 05/24 22:27
推 dreambird:autorelease 不是 GC, OSX才有GC iOS沒有 05/24 22:34
→ Lordaeron:所以囉,有人不只會查不會看.... 05/24 22:34
→ CCTSAI:手動GC最討厭的就是它常在你最不想要的時候GC來拖慢效能 05/24 22:35
→ CCTSAI:尤其是Android那種直接砍掉的GC法,一GC整台機器就頓一下 05/24 22:36
→ Lordaeron:你要auto回收,又不想付代價,有這麼好的事? 05/24 22:55
→ Lordaeron:想只拿錢不用打工的, 只有跟老媽要一途. 05/24 22:59
→ sayya2311:你們到底在high什麼? 當然只是建議? 在不需要GC的時侯 05/24 23:06
→ sayya2311:何必為了你的呼叫而去強迫GC? 但其它情況呢? 綽綽有餘.. 05/24 23:07
→ sayya2311:demo的程式的網址都給上面了至少看一下吧? 在gc()與確認 05/24 23:07
→ sayya2311:空間被回收之間, 有任何sleep()的空檔嗎? 沒有... 05/24 23:08
→ iincho:我還以為我記錯, iOS記得是沒有GC的.... 05/24 23:09
→ iincho:給樓上, 這邊討論的就是這種特殊情況.... 05/24 23:10
→ sayya2311:不用擔心, 連呼叫GC也沒用的時侯, 接下來準備接 05/24 23:11
→ sayya2311:OutOfMemoryException就好了 05/24 23:12
→ iincho:不是沒用,這邊討論的主要是CG的時間點的問題。 05/24 23:14
→ iincho:你寫過Android上一些對responsiveness比較要求的東西就懂了 05/24 23:14
→ iincho:比如說Game,玩到一半系統給你GC一下玩得人會覺得畫面頓一 05/24 23:15
→ iincho:下,這種問題交給系統全動處理的時候就很討厭... 05/24 23:15
→ sayya2311:不過絕大部份GUI的問題, 都是GUI Thread的問題, 而不是 05/24 23:22
→ sayya2311:GC的問題, 因為類似問題不只發生在有VM的地方, 不過 05/24 23:22
→ sayya2311:沒看過程式的情況下原PO說GC我也只能說GC, 參考參考 05/24 23:23
→ choufeng:事實是文件自身都寫的很保守了 應該說叫用gc()是建議VM 05/24 23:29
→ choufeng:"趕快"作GC 但不能"保證"會去作GC 05/24 23:29
→ choufeng:不能依賴gc() 若記憶體消耗太多的情況下應該要對應的作法 05/24 23:30
→ choufeng:盡量讓物作能被reuse,不要用的物件盡量設為null等等 05/24 23:32
→ choufeng:省製造一點垃圾 而不是叫GC()沒用就等著接Exception 05/24 23:32
→ sayya2311:若不能插上一條RAM,等OutOfMemeory大概就是唯一能做的.. 05/24 23:34
→ choufeng:有些小細節事實上會製造出很多垃圾 量小看不出來量大就知 05/24 23:34
→ choufeng:道可怕了 像是String接龍不改用StringBuffer等等的.. 05/24 23:36
→ choufeng:nono~會出現OutOfMemeory沒什麼大不了的 是可以透過 05/24 23:37
→ choufeng:tunning來解決的 大部份情況是不需要走到加RAM 05/24 23:38
推 ledia:OutOfMemoryException ? 有寫過 Java 程式嗎? @@ 05/24 23:39
→ Lordaeron:很多寫java 的稱為programmer 的想法就是,它會GC 05/24 23:41
→ Lordaeron:如果來不及而out of memory,就多買一點RAM,1G不夠買10G 05/24 23:42
→ Lordaeron:反正我的寫法就是這樣子,一切的問題都是Java 的錯. 05/24 23:42
→ choufeng:沒法~有時太多東西被包裝來,會讓人反而不懂背後的道理 05/24 23:43
→ Lordaeron:IBM的java 發生out of memory時,現在的並不一定會掉下來 05/24 23:43
→ choufeng:"一切的問題都是Java 的錯" 拷!這句我真的感同身受 我真 05/24 23:44
→ choufeng:的遇過降樣的人 真的讓我很無言...很瞎... 05/24 23:44
→ Lordaeron:只會log out of memory 05/24 23:44
→ sayya2311:不要做過多假設..假設自己還比能系統考慮得更多? 假設 05/25 00:01
→ sayya2311:程式還不夠完美? 假設loading只是定量? 也許你們還有更 05/25 00:01
→ sayya2311:多想像, 但再多假設也不會比"沒有任何假設"更真實. 05/25 00:02
→ Lordaeron:是啊, 所以GC了 05/25 00:43
推 bravomao:物件的存活週期短你可以用縮小young Gen的方式來處理, 05/25 01:18
→ bravomao:可以避過大規模的GC而且物件在Gen之間的轉移時間較少。 05/25 01:19
→ bravomao:當然大規模的GC遲早還是會到來,但是只要CPU處理能力夠, 05/25 01:20
→ bravomao:那大規模的GC(full gc)的影響就會小一點。 05/25 01:20
推 bravomao:IBM的VM很有趣,他沒有Perm區塊,native的HEAP也是用作業 05/25 01:22
→ bravomao:系統的,而且他在發生JAVA HEAP OOM的時候會自我處理, 05/25 01:23
→ bravomao:其實Sun的也會,大部分的VM再遭遇OOM的時候第一個動作好 05/25 01:24
→ bravomao:像都是去執行一次full gc,但是我遇過幾次IBM的VM在無法 05/25 01:24
→ bravomao:從full gc得到足夠的HEAP的時候他會自爆然後重啟.... 05/25 01:25
→ bravomao:這樣算是全自動化吧...... 05/25 01:25