(面试题)Java中的内存泄露

来源:互联网 发布:背单词软件 编辑:程序博客网 时间:2024/06/05 06:42

(个人见解,欢迎讨论和指出不当的地方)

首先是内存溢出和内存泄露的理解:

内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。 

所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中Java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉。由于Java 使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。

我自己的理解是,程序已经跑完了,对象还在那里占用内存。内存泄露堆积后果很严重,无论多少内存,迟早会被占光。


Object o1 = new Object();

Object o2 = o1;

o1 = null; // 这时o1指向的那个对象回收了吗?没有,因为它还被o2引用着

o2 = null; // 这样才能回收

实际应用中,只要o2的作用域很小,不执行o2=null也是没有问题的,因为只要o2过了它的生存期,它指向的对象就能被回收。

结论是,作用域越大的变量,越要引起重视,因为它可能占用着某些对象引用而导致对象不能被回收。换句话说,尽可能地缩小变量的作用域——这也是你在Java中关于内存方面能做的唯一努力了。---引用别人的



(百度上找到的一个题,引用地址:http://group.jobbole.com/15389//)

答案是C

原创粉丝点击