siuying 積分 0

這種「X不是萬能的」有甚麼用呢?GC也不是萬能的, 我也見過Java 的 Server process OOM。

這是文章的子討論串,你可以回到上層查看所有討論和文章
IngramChen 積分 0

memory leak 和 process crash 怎麼相提並論。有 GC 又不代表不會有 memory leak,這前提還要討論嗎?

問題是沒 GC 你除了處理 memory leak ,還要擔心不小心踩到記憶體,踩到記憶體的懲罰又很嚴重 (尤其不適合要跑好幾個月的 process)

ARC 的確可有效減少踩錯,但跟完全不會踩錯的 GC 比又差了一截,這是很明顯的缺點啊。

siuying 積分 0

你是誤會了甚麼, mobile app 是會 crash, 但很少是因為'dangling pointer'. 你說的'哪個app不閃退'和Memory management根本沒直接關係好不好?

「完全不全會踩錯的GC」如果GC可以完全不會踩錯, ARC為何不可呢?

IngramChen 積分 0

那閃退的大部份原因是什麼?

siuying 積分 0

很難説大部分原因,因為有很多原因。這樣說吧,android app用 vm 有 GC, 閃退會比較少嗎?據我看的統計不是這樣。

IngramChen 積分 0

android app 閃退原因多是 exception,大部份是 NullPointerException。

我不是說 android 有 GC 所以 bug 會比 swift iOS 少,閃退會比較少。我只是說 iOS crash 的原因很多是 dangling pointer,是因為要手動管理記憶體造成的。

這個現象對 server 是不利的。Java 是很多 NPE,但在 server 環境下就只是個 bug 而已,process 還是可以繼續服務。swift 踩到記憶體就是整個 crash,這不利 long running application 啊。(mobile 上到是無所謂)

ARC 也許可以再進化,解決這個問題吧 (例如它找到一個演算法完全解決 circular reference),不然只要讓開發者去寫 unowned 這種東西,就是有機會踩記憶體 crash。(有誰的 app 沒 unowned ??)

siuying 積分 0

我就是說你的推論全錯了,要是 dangling pointer 是 crash 的主因,那在沒有 dangling pointer 的地方就很少 crash 了,對不?