[问题] memory leak in c++ & java

楼主: ireullin (raison detre)   2015-06-18 11:11:36
请问一下各位
关于memory leak的情形
在c/c++的状况中
如果配置了内存但是没有释放
最后该程式结束后
内存是否还会归还作业系统
还是从此这段内存就无法再使用
直到下一次的作业系统重新开机
在早期公司的前辈们都是这样说的
但是后来看了一些文章之后
好像并不是这样
而java中的如果产生了memory leak
通常是该物件已经没有在使用
但是有其他的物件还参照着这个指标的状况
造成GC无法正常回收
请问在何种状况下内存才会归还
1. 该java程式结束后
2. 整个jvm结束
3. 必须等到作业系统重开
我在网络上查了很多
但是各家说法好像都不一样
所以想请问一下大家的意见
作者: azureblaze (AzureBlaze)   2015-06-18 11:36:00
1.一般作业系统程式结束就会还2. java板在隔壁但我相信是1.内存卡到重开是很严重的问题,现代OS不会让你这样搞
作者: ctrlbreak   2015-06-18 11:57:00
对OS而言JVM才是应用程式 XD
作者: azureblaze (AzureBlaze)   2015-06-18 12:14:00
可是JVM里的OS理论上也会处理吧
作者: uranusjr (←這人是超級笨蛋)   2015-06-18 13:51:00
一个 JVM 通常就是对应到一个 Java application, 所以对 Java 而言前两个其实基本上对等; 对于 OS 而言 JVM本身就是一个程式, 所以和 C/C++ 状况一样, 会不会在程式结束回收要看 OS, 前面 free() 讨论串有稍微讨论到
作者: Killercat (杀人猫™)   2015-06-18 15:44:00
第一个问题 非保护模式的几乎是定番,一定中奖但是保护模式的OS通常都能正确归还第二个问题虽然是java 不过查"weak reference java"C++有对应的std::weak_ptr可以用请养成善用weak reference的好习惯 善待自己也善待别人
作者: johnhmj (耗呆肥羊)   2015-06-18 16:56:00
weak_ptr since C++11 http://goo.gl/CfrdpB
楼主: ireullin (raison detre)   2015-06-18 17:11:00
请问非保护模式是指?
作者: Killercat (杀人猫™)   2015-06-18 17:16:00
DOS跟大多数的MCU都是非保护模式,请google保护模式....其实我一时忘了名词 非保护模式应该直接叫真实模式主流OS都是保护模式 包含Linux OSX跟Windows另外 C++11之前 也有boost::weak_ptr能用
作者: tinlans ( )   2015-06-18 23:18:00
去 MCU 厂上班就会知道死了... XD
作者: WPC001 (好闷, 迷惘~~)   2015-06-19 20:31:00
C++11的weak ptr跟这有啥关系? 你真的清楚什么是weak_ptr?C++... boost不是唯一... 也没有一定要用
作者: Killercat (杀人猫™)   2015-06-19 20:57:00
这是相对于shared_ptr对gc的(原理不同 结果一样)app结束回收是另外一件事,他一共问了三件事情weak_ptr指的是他讲的“java memory leak”归纳一下 他问了1.内存app结束释放 2.java的"leak"跟3.Java程式结束何时内存会“归还”而我回答的是2 顺便跟他说这相当于c++11的weak_ptr而普通reference可以比做shared_ptr

Links booklink

Contact Us: admin [ a t ] ucptt.com