楼主:
ireullin (raison detre)
2015-06-18 11:11:36请问一下各位
关于memory leak的情形
在c/c++的状况中
如果配置了内存但是没有释放
最后该程式结束后
内存是否还会归还作业系统
还是从此这段内存就无法再使用
直到下一次的作业系统重新开机
在早期公司的前辈们都是这样说的
但是后来看了一些文章之后
好像并不是这样
而java中的如果产生了memory leak
通常是该物件已经没有在使用
但是有其他的物件还参照着这个指标的状况
造成GC无法正常回收
请问在何种状况下内存才会归还
1. 该java程式结束后
2. 整个jvm结束
3. 必须等到作业系统重开
我在网络上查了很多
但是各家说法好像都不一样
所以想请问一下大家的意见
1.一般作业系统程式结束就会还2. java板在隔壁但我相信是1.内存卡到重开是很严重的问题,现代OS不会让你这样搞
作者: ctrlbreak 2015-06-18 11:57:00
对OS而言JVM才是应用程式 XD
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2015-06-18 13:51:00一个 JVM 通常就是对应到一个 Java application, 所以对 Java 而言前两个其实基本上对等; 对于 OS 而言 JVM本身就是一个程式, 所以和 C/C++ 状况一样, 会不会在程式结束回收要看 OS, 前面 free() 讨论串有稍微讨论到
第一个问题 非保护模式的几乎是定番,一定中奖但是保护模式的OS通常都能正确归还第二个问题虽然是java 不过查"weak reference java"C++有对应的std::weak_ptr可以用请养成善用weak reference的好习惯 善待自己也善待别人
楼主:
ireullin (raison detre)
2015-06-18 17:11: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不是唯一... 也没有一定要用
这是相对于shared_ptr对gc的(原理不同 结果一样)app结束回收是另外一件事,他一共问了三件事情weak_ptr指的是他讲的“java memory leak”归纳一下 他问了1.内存app结束释放 2.java的"leak"跟3.Java程式结束何时内存会“归还”而我回答的是2 顺便跟他说这相当于c++11的weak_ptr而普通reference可以比做shared_ptr