作者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/cn.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