Gc 是一种失败的内存管理模式


#84

没错,可是我也可以用lz的口气说:“连weakref都要去注意,难道不是失败么?”

这东西是trade off就是trade off,没必要吹到天上去。


#85

你脑子糊涂了? 要找就找 GC 成功的证据出来。

要是你我都杀人了, 你找个我杀人的证据你就无罪了, 你要是这个逻辑, 我劝你也不要做程序员了。 程序是个思维严谨的东西。


#86

不不不,这不能说素质低的码农用不来,就是shared_ptr失败的问题啊,因为own的概念是码农本来就应该具有的素质啊。

也就是,总不能码农素质无下限啊,如果素质无下限的话,给他任何特性都可以用得很糟糕,GC甚至就像给了这些人完完全全的承诺,你可以乱用,我大GC保证你回收!但事实上我大GC做不到!


#87

这就是典型的 cycle reference,问题的场景类似于并发中常出现的dead lock。GC在处理这种情况时,refcount只是一个基本依据,此时GC还要考虑运行时上下文,这势必会增加GC的复杂度并影响GC的性能。

在C++中,基于shared_ptr来管理内存时,如果出现cycle reference就会有内存泄漏,这也就是weak_prt出现的场景。 在C++中,如果是基于manual管理内存,cycle reference经常导致的一个问题是 double free。 鱼和熊掌不可兼得,依赖于具体的场景来取舍了。 ARC似乎是一个完美的方案,但是它在处理闭包时也有好多坑。 没有适合所有场景的银弹,但是特定的场景下应该有最合适的选择,内存管理也一样


#88

这就是我一直的态度啊。GC也不是很失败啊,在你不在乎gc pause和手动资源管理的时候(比如with)。Python和Ruby在web场景下就是个很好的例子。(只是他们语言设计上有一些bug……如果说良好的语言设计,有lisp和clojure。)

GC还可以实现热更新代码,这个我也说了。

但是当你在乎gc pause的时候,当你需要RAII的时候,确实是失败的。但不是C++程序员需要,就全世界所有人都需要。


#89

那 GC 就和全世界所有程序员的需要冲突了, 难道不是失败的么?

为了掩盖这些冲突, GC 甚至宣称, 程序员的那些需要是不对的。


#90

对此是C/C++程序员的一家之言。我也是C程序员,也写过很多C++。我掌握,并不意味着写了10多年webapp的老码农掌握。

GC也没有啊,否则with是怎么回事?否则try … finally是怎么回事?Java的设计者也没有忽视掉无时无刻提醒程序员手动管理资源。

顺便,其实这个我也可以说,GC环境下手动管理资源是一个码农的基本素质……早年lisp的老鸟早就知道这个教训了。不能拿没受过标准训练说事情,码农素质不能没有下限……

一个道理。


#91

???我说过了,有时候你需要GC啊

这是哪里的说法?


#92

不不不, 这是 java 变相承认 GC 失败了。

因为从 GC 的定义上来说, 就是 “我大GC许诺你乱来”


#93

哈?他们要去掉finally么?


#94

他们已经在给 GC 打各种补丁了 。

一个号称 “一劳永逸的解决内存问题” 的 GC , 其实一点都做不到


#95

对,这不就回归到这个贴子的主题了?

你说GC无时提醒码农手动管事资源,那GC干嘛去了?

正如这个贴子作者所说:“最终垃圾收集仍然没有解决 “人容易犯错” 的问题, 还是把其他资源的泄漏问题丢给了程序员.

但shared_ptr只是让码农有基本的素质(这不是针对shared_ptr特有的),就能解决资源的泄漏问题,并没有让人手动来管理资源。

上面这句话,我发现这个前提根本不算是前提,因为跟shared_ptr(因为无论用不用shared_ptr都应该有的素质)都无关啊。


#96

GC只管理内存。只防止heap不够用。仅此而已。你如果把GC放在一个allocator的位置上,或许更好一些。

你太高要求码农了。对于这个争端,我不感兴趣。因为是一直以来的争端。到底码农要不要弄ownership要不要懂pointer,甚至要不要懂操作系统……我想你的答案是:一定的。可是大众的答案不统一。

指出:shared_ptr需要配合程序员的“基本对指针的素质”来使用,是我的唯一目的。


#97

顺便只是吐槽一下,文章比标题还大的字,反而是我最讨厌的。


#98

既然有此目的, 你可以开帖子慢慢讨论, 不要指望我会修改。 No Way


#99

目的在跟帖里达到了。我也找到我代码的bug了。于是也就没啥好继续讨论了。

顺便,我用户id下面的头衔,我自己怎么无法修改?

也顺便表示,这个论坛bug也太多了。


#100

因为你根本就没有什么东西可讨论。

你无非就是想靠哗众取宠以示牛逼。还美其名曰 “不想误导别人” 让你拿出真本事去阻止误导

你不是 贴一个链接了事 , 就是 说什么 没啥好讨论的。


#101

把GC看成是一个allocator?

我的意思并不是说要不要懂操作系统这么高深,我的意思就好比,一个码农,像会缩进也是他的基本素质,而不是通过语言强制。


#102

位置上,是这样的。虽然功能上不恰当。GC是个纯内存的辅助。有了GC,你就要有finally,或者with一样的东西帮忙资源管理。

认为语言指针ownership不能期望所有人都掌握和考虑周全,做程序员的时间比你年龄都大的码农有的是。虽然我不赞成,但是反对你这种看法的程序员有的是。

你可以说这是个极端:但是跟他们说shared_ptr解决问题,他们肯定不买单。


#103

你只是哗众取宠骗取点击量。希望我给你发帖,然后骗取你的点击量给你赚钱。呵呵。

我只是正视听的作用。和哗众取宠的人没兴趣交流。