gc 只能回收通过new 关键字的对象实例,那什么东西gc回收不了,从而引起内存泄露呢?请各位大拿来讲讲?
解决方案 »
- 我java项目中有个.properties文件,我把这个项目打成了jar包,我怎么让别人双击这个jar,把这个properties文件释放到指定路径下呢?
- 如何激活进程中的程序激活
- 窗口停靠
- 求助,帮忙写个车的类 万分感谢 在线等
- 请问 如何用htmlparser提取html中的文本呢?
- 各位大虾,我想学JAVA,那位给介绍几本关于类库比较好的书呢?
- ToolBarAction的用法?
- 我刚装了visual age for java(4.0),请问如何才能做成exe文件?
- 请教:Applet引用了Swing,为何在IE中没法运行啊?
- 万分急愤,本人在一个问题中提出从什么地方下载visual age for java 3.5或更高版本,有朋友给答案,我一夜没睡觉从所给网址上下载,结构竟然是2.0版本!!!!!!!!!!!!
- 求:遗传算法解最小生成树的源代码。
- 一个困扰很久的小问题
在一个长生命周期的对象里使用一个短生命周期的对象,gc 能够回收这个短寿命的对象吗?比如一个singleton 对象里组合了一些对象?
在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。
在java中,gc机制有n个区,它们共享着jvm的256m内存(这个值可以设)
新建的对象在新对象区中, 过一定时间后被转移到old area.
(如果新对象区超过自身75%时,也会进行转移)
old area 也细分了几个区,当gc机制启动时,old area的某些对象就被清除,释放内存(具体的就不说了,来看看如何造成内存泄露的)gc时,会去old area中查看哪些对象没有reference,找到一个,绝不留情的释放。
所以,old area中的有reference的对象超过了一定量(比如256m),那就...(另注:不同的vm的gc参数不太一样,但都可以设,例大小,百分比,响应时间)
下面举个程序例子
List list = new ArrayList();
for (int i = 0; i < 100; i++)
{
Object o = new Object();
list.add(o);
o = null;
}
那么o已经被置成null,但list又包含其引用, 使其不能被释放.
6楼的说法不完全,当你的程序内存占用了超过最大内存限制也会抛出OutOfMemoryException, 如:你将一个1G的文件装载到内存中, 而jvm配置的最大内存限制为512M.
jni可以会,比如在swt中
线程死锁无法正常关闭