内存泄露

javaVM虽然有自己的垃圾回收器,可以回收大部分的内存空间,但还是有部分的内存空间是回收不了的.

内存中饿对象分为3种:
1.无用的对象,但是不可达,这是C或C++中的内存泄露;
2.无用的对象,也可达,这就是java中的内存泄露;
3.有用的对象.这就不是内存泄露了.

为什么java中也会存在内存泄露呢,什么情况下会出现这种情况,下面是一个比较普遍的例子:
List list = new ArrayList();
		for (int i = 0; i < 1000; i++) {
			list.add(i);
		}
		for (int i = 0; i < 1000; i++) {
			list.remove(i);
		}

当集合或者数组(本质上是栈)加入了很多数据后,又将这些数据删除,集合或数组仍然会保留着一些信息来记录它们,所以导致GC不会把它们删除,这就是导致内存泄露的原因.

解决方案就是:
list.get[i]=null

一般内存泄露是很难发现的,所以它很可能长久地存在于系统中,而没有被发现,但可以通过工具来发现它,比如bea的JRocket,IBM的Purify等等,都不错.

你可能感兴趣的:(java,C++,c,IBM,C#)