[問題] memory leak in c++ & java

看板C_and_CPP (C/C++)作者 (raison detre)時間10年前 (2015/06/18 11:11), 編輯推噓3(3027)
留言30則, 8人參與, 最新討論串1/1
請問一下各位 關於memory leak的情形 在c/c++的狀況中 如果配置了記憶體但是沒有釋放 最後該程式結束後 記憶體是否還會歸還作業系統 還是從此這段記憶體就無法再使用 直到下一次的作業系統重新開機 在早期公司的前輩們都是這樣說的 但是後來看了一些文章之後 好像並不是這樣 而java中的如果產生了memory leak 通常是該物件已經沒有在使用 但是有其他的物件還參照著這個指標的狀況 造成GC無法正常回收 請問在何種狀況下記憶體才會歸還 1. 該java程式結束後 2. 整個jvm結束 3. 必須等到作業系統重開 我在網路上查了很多 但是各家說法好像都不一樣 所以想請問一下大家的意見 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.61.13 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1434597099.A.ECE.html

06/18 11:36, , 1F
1.一般作業系統程式結束就會還
06/18 11:36, 1F

06/18 11:37, , 2F
2. java板在隔壁但我相信是1.
06/18 11:37, 2F

06/18 11:38, , 3F
記憶體卡到重開是很嚴重的問題,現代OS不會讓你這樣搞
06/18 11:38, 3F

06/18 11:57, , 4F
對OS而言JVM才是應用程式 XD
06/18 11:57, 4F

06/18 12:14, , 5F
可是JVM裡的OS理論上也會處理吧
06/18 12:14, 5F

06/18 13:51, , 6F
一個 JVM 通常就是對應到一個 Java application, 所以
06/18 13:51, 6F

06/18 13:52, , 7F
對 Java 而言前兩個其實基本上對等; 對於 OS 而言 JVM
06/18 13:52, 7F

06/18 13:53, , 8F
本身就是一個程式, 所以和 C/C++ 狀況一樣, 會不會在程
06/18 13:53, 8F

06/18 13:54, , 9F
式結束回收要看 OS, 前面 free() 討論串有稍微討論到
06/18 13:54, 9F

06/18 15:44, , 10F
第一個問題 非保護模式的幾乎是定番,一定中獎
06/18 15:44, 10F

06/18 15:44, , 11F
但是保護模式的OS通常都能正確歸還
06/18 15:44, 11F

06/18 15:45, , 12F
第二個問題雖然是java 不過查"weak reference java"
06/18 15:45, 12F

06/18 15:45, , 13F
C++有對應的std::weak_ptr可以用
06/18 15:45, 13F

06/18 15:46, , 14F
請養成善用weak reference的好習慣 善待自己也善待別人
06/18 15:46, 14F

06/18 16:56, , 15F
weak_ptr since C++11 http://goo.gl/CfrdpB
06/18 16:56, 15F

06/18 17:11, , 16F
請問非保護模式是指?
06/18 17:11, 16F

06/18 17:16, , 17F
DOS跟大多數的MCU都是非保護模式,請google保護模式
06/18 17:16, 17F

06/18 17:17, , 18F
....其實我一時忘了名詞 非保護模式應該直接叫真實模式
06/18 17:17, 18F

06/18 17:18, , 19F
主流OS都是保護模式 包含Linux OSX跟Windows
06/18 17:18, 19F

06/18 17:20, , 20F
另外 C++11之前 也有boost::weak_ptr能用
06/18 17:20, 20F

06/18 23:18, , 21F
去 MCU 廠上班就會知道死了... XD
06/18 23:18, 21F

06/19 20:31, , 22F
C++11的weak ptr跟這有啥關係? 你真的清楚甚麼是weak_ptr?
06/19 20:31, 22F

06/19 20:33, , 23F
C++... boost不是唯一... 也沒有一定要用
06/19 20:33, 23F

06/19 20:57, , 24F
這是相對於shared_ptr對gc的(原理不同 結果一樣)
06/19 20:57, 24F

06/19 20:58, , 25F
app結束回收是另外一件事,他一共問了三件事情
06/19 20:58, 25F

06/19 20:59, , 26F
weak_ptr指的是他講的「java memory leak」
06/19 20:59, 26F

06/19 21:00, , 27F
歸納一下 他問了1.記憶體app結束釋放 2.java的"leak"跟
06/19 21:00, 27F

06/19 21:00, , 28F
3.Java程式結束何時記憶體會「歸還」
06/19 21:00, 28F

06/19 21:01, , 29F
而我回答的是2 順便跟他說這相當於c++11的weak_ptr
06/19 21:01, 29F

06/19 21:02, , 30F
而普通reference可以比做shared_ptr
06/19 21:02, 30F
文章代碼(AID): #1LWZRhxE (C_and_CPP)
文章代碼(AID): #1LWZRhxE (C_and_CPP)