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