作者:
ireullin (raison detre)
2015-06-18 11:13:07請問一下各位
關於memory leak的情形
在c/c++的狀況中
如果配置了記憶體但是沒有釋放
最後該程式結束後
記憶體是否還會歸還作業系統
還是從此這段記憶體就無法再使用
直到下一次的作業系統重新開機
在早期公司的前輩們都是這樣說的
但是後來看了一些文章之後
好像並不是這樣
而java中的如果產生了memory leak
通常是該物件已經沒有在使用
但是有其他的物件還參照著這個指標的狀況
造成GC無法正常回收
請問在何種狀況下記憶體才會歸還
1. 該java程式結束後
2. 整個jvm結束
3. 必須等到作業系統重開
我在網路上查了很多
但是各家說法好像都不一樣
所以想請問一下大家的意見
作者: ctrlbreak 2015-06-18 11:21:00
兩個問題都是看作業系統, 很很早期的作業系統不會回收應用程式不正常歸還的話都是要等作業系統重開.
作者:
yoshilin (明明可以靠臉吃飯)
2015-06-18 15:54:00jvm會自己作回收,c++可以測試看看
這不叫leak 這叫做設計錯誤 請用weak reference
作者: ctrlbreak 2015-06-18 19:35:00
java寫很爛, JVM也不見得可以正常回收. 最後還是得關掉JVM
作者:
Dnight (暗夜)
2015-06-19 09:56:00都已經不用寫指令還記憶體了你還可以把記憶體拿著手不給還其實也是一種才能阿...
其實還滿簡單的 尤其愛用singleton的裡面放個list一直堆垃圾就會出包了....不需要啥才能,一堆爛code都這樣寫....
應該釐清的是 memory leak 怎麼發生,才來討論它的歸還比如 JavaSE 1.6 的 String.subString() 就必須等所有參考到原字串的物件都被回收才會釋放記憶體