大型C++和Java系統的一個通病就是漏內存

n
netghost
楼主 (未名空间)

我幾乎很少看到過規模達到一定程度的C++和Java跑很長時間之後不漏內存的。

這就是爲啥C++最流行的地方是寫桌面程序,速度響應不錯。實在漏得太多不行了可以
關了重來,比如說瀏覽器,office,圖片編輯軟件,各種視頻播放。當然還有例子就是編譯器,反正內存基本上是從來不釋放的,編譯完了完事。

Java因爲反映慢所以最早其實是想搞前端的,比如說desktop和網頁applet,但是因爲
效率響應實在是太差,所以很多年過去之後就慢慢沒了。不過Java去搞服務器市場,因爲反正不用考慮內存管理所以程序員好招結果活下來了。但是也就是因爲這個特點,
Java的內存控制就更難搞一些,內存漏沒漏都說不清楚,此外習慣寫GC的人因爲沒有回收內存的概念,常常喜歡漏句柄。所以java的服務器程序,一般需要一堆的監控,看着不對就重啓。當然這也是另外一生態系統。

g
guvest

Golang一样也会漏内存。还挺难查。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 我幾乎很少看到過規模達到一定程度的C++和Java跑很長時間之後不漏內存的。
: 這就是爲啥C++最流行的地方是寫桌面程序,速度響應不錯。實在漏得太多不行了可以
: 關了重來,比如說瀏覽器,office,圖片編輯軟件,各種視頻播放。當然還有例子就是
: 編譯器,反正內存基本上是從來不釋放的,編譯完了完事。
: Java因爲反映慢所以最早其實是想搞前端的,比如說desktop和網頁applet,但是因爲
: 效率響應實在是太差,所以很多年過去之後就慢慢沒了。不過Java去搞服務器市場,因
: 爲反正不用考慮內存管理所以程序員好招結果活下來了。但是也就是因爲這個特點,: Java的內存控制就更難搞一些,內存漏沒漏都說不清楚,此外習慣寫GC的人因爲沒有回
: 收內存的概念,常常喜歡漏句柄。所以java的服務器程序,一般需要一堆的監控,看着
: 不對就重啓。當然這也是另外一生態系統。

n
netghost

對的,沒提go是因爲it還不夠主流。那個東西除了有GC,而且因爲成天讓小白隨便
launch goroutine做並行,更是可以漏得沒邊了。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Golang一样也会漏内存。还挺难查。

m
minquan

这么夸张呢?
有GC还漏?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Golang一样也会漏内存。还挺难查。

g
guvest
https://go101.org/article/memory-leaking.htmlhttps://stackify.com/memory-leaks-java/https://www.fugue.co/blog/diagnosing-and-fixing-memory-leaks-in-python.html

随便找找,到处都是文章和github issues。
有gc的语言,我感觉其严格性其实都是很难理解的。
要写好有质量的,且包含复杂逻辑的代码,更不容易。

另外gc是提高内存管理的。不能看作有gc,所以内存问题就没了。
不存在universal memory leak 检查器,其是图灵停机
问题。

【 在 minquan (三民主义) 的大作中提到: 】
: 这么夸张呢?
: 有GC还漏?

m
minquan

好的,谢谢。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: https://go101.org/article/memory-leaking.html
: https://stackify.com/memory-leaks-java/
: https://www.fugue.co/blog/diagnosing-and-fixing-memory-leaks-in-python.
html
: 随便找找,到处都是文章和github issues。
: 有gc的语言,我感觉其严格性其实都是很难理解的。
: 要写好有质量的,且包含复杂逻辑的代码,更不容易。
: 另外gc是提高内存管理的。不能看作有gc,所以内存问题就没了。
: 不存在universal memory leak 检查器,其是图灵停机
: 问题。

g
gogogo2

现在写代码趋势是短平快,都内嵌函数block,没人关心内存问题,
i
iDemocracy

大型软件一般是大型团队在做,人多了必有江湖,C的指针问题就成了有意无意的杀器
。如果是做自己的系统,必然处处提防内存泄漏。但做别人的系统,恐怕就没那么上心了,甚至个别人故意放几个漏洞进去。

虽然这不完全是语言的问题,但C++20已经号称废除指针了。
n
netghost

用技術手段解決人的問題從來沒有work過。C可以有意埋坑,C++更容易,rust和golang一樣容易。

【 在 iDemocracy (DEMO) 的大作中提到: 】
: 大型软件一般是大型团队在做,人多了必有江湖,C的指针问题就成了有意无意的杀器
: 。如果是做自己的系统,必然处处提防内存泄漏。但做别人的系统,恐怕就没那么上心
: 了,甚至个别人故意放几个漏洞进去。
: 虽然这不完全是语言的问题,但C++20已经号称废除指针了。