作者ireullin (raison detre)
看板java
標題[問題] memory leak in c++ & java
時間Thu Jun 18 11:13:07 2015
請問一下各位
關於memory leak的情形
在c/c++的狀況中
如果配置了記憶體但是沒有釋放
最後該程式結束後
記憶體是否還會歸還作業系統
還是從此這段記憶體就無法再使用
直到下一次的作業系統重新開機
在早期公司的前輩們都是這樣說的
但是後來看了一些文章之後
好像並不是這樣
而java中的如果產生了memory leak
通常是該物件已經沒有在使用
但是有其他的物件還參照著這個指標的狀況
造成GC無法正常回收
請問在何種狀況下記憶體才會歸還
1. 該java程式結束後
2. 整個jvm結束
3. 必須等到作業系統重開
我在網路上查了很多
但是各家說法好像都不一樣
所以想請問一下大家的意見
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.61.13
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1434597190.A.422.html
1F:推 ctrlbreak: 兩個問題都是看作業系統, 很很早期的作業系統不會回收 06/18 11:21
2F:→ ctrlbreak: 應用程式不正常歸還的話都是要等作業系統重開. 06/18 11:22
3F:推 yoshilin: jvm會自己作回收,c++可以測試看看 06/18 15:54
4F:→ Killercat: 這不叫leak 這叫做設計錯誤 請用weak reference 06/18 15:57
5F:推 ctrlbreak: java寫很爛, JVM也不見得可以正常回收. 最後還是得 06/18 19:35
6F:→ ctrlbreak: 關掉JVM 06/18 19:35
7F:推 Dnight: 都已經不用寫指令還記憶體了你還可以把記憶體拿著手不給還 06/19 09:56
8F:→ Dnight: 其實也是一種才能阿... 06/19 09:56
9F:→ Killercat: 其實還滿簡單的 尤其愛用singleton的 06/19 15:32
10F:→ Killercat: 裡面放個list一直堆垃圾就會出包了.... 06/19 15:32
11F:→ Killercat: 不需要啥才能,一堆爛code都這樣寫.... 06/19 15:32
12F:→ joyolkreg: 應該釐清的是 memory leak 怎麼發生,才來討論它的歸還 07/03 23:55
13F:→ joyolkreg: 比如 JavaSE 1.6 的 String.subString() 就必須等所有 07/03 23:57
14F:→ joyolkreg: 參考到原字串的物件都被回收才會釋放記憶體 07/03 23:58