解决方案 »
- dom4j添加节点失败
- 菜鸟关于类的问题
- ObjectInputStream如何传输byte数组呢?
- 系统提供的类不可以用怎么回事?
- 关于全文检索工具lucene中怎样维护索引库.如何更新和删除一条索引,我眯了好久了,没找着答案.熟悉lucene的请进来拉我一把.
- 【问题求助】关于JAVA的java
- 请问.class如何才能不被反编译软件解析出来源码?谢谢!
- 如何实现用java关闭 计算机啊!
- 请大家帮个忙- 如何用javascript或vbscript 判定某超连结是否被访问?
- GregorianCalendar类构造方法的问题
- 如何在JAVA中做一个累加计数器
- 刚学java,想问一个关于jdk的问题
if(size==0) throw new EmptyStackException();
return elements[--size];
}
其实就是这个函数实现上的问题如果是这样的实现,比如说原来有10个成员,pop1一个之后,虽然size变成了9,但是element[9]的值仍然有一个引用。正确的做法应该是
public Object pop(){
if(size==0) throw new EmptyStackException();
Obecjt o = elements[size];
element[size]=null;
size--;
return o;
}
1、首先这种做法跟pop后push其实是一个意思吧?
2、即便出现那种极端情况,就是先push1W个元素,然后再pop9990个元素,这样确实会出现大量用不到的引用对象,但作者却说到了内存泄露的问题,我实在想不到push都没有造成内存泄露,为何pop还造成内存泄露了呢?
1、首先这种做法跟pop后push其实是一个意思吧?
2、即便出现那种极端情况,就是先push1W个元素,然后再pop9990个元素,这样确实会出现大量用不到的引用对象,但作者却说到了内存泄露的问题,我实在想不到push都没有造成内存泄露,为何pop还造成内存泄露了呢?1. pop后,push就不会有这个问题。你看我后面写的那一段,关键是后面的引用没有被 释放。再push就等于原来的引用被释放了。2. java中的内存泄露并不同于C语言所说的内存泄露,而是一种和业务无关的引用仍然存在,从而造成了JVM无法回收这块内存。
这么说,你理解了为什么作者说内存泄露了吧。然后你可以想想你举的这个例子,是不是就是作者所说的内存泄露了呢?
1、首先这种做法跟pop后push其实是一个意思吧?
2、即便出现那种极端情况,就是先push1W个元素,然后再pop9990个元素,这样确实会出现大量用不到的引用对象,但作者却说到了内存泄露的问题,我实在想不到push都没有造成内存泄露,为何pop还造成内存泄露了呢?1. pop后,push就不会有这个问题。你看我后面写的那一段,关键是后面的引用没有被 释放。再push就等于原来的引用被释放了。2. java中的内存泄露并不同于C语言所说的内存泄露,而是一种和业务无关的引用仍然存在,从而造成了JVM无法回收这块内存。
这么说,你理解了为什么作者说内存泄露了吧。然后你可以想想你举的这个例子,是不是就是作者所说的内存泄露了呢?哦,,,,好像明白了点了,就是如果有很多类似这样的类,或者每个类都出现这种极端的扩展后收缩的情况,就造成了过多的资源浪费,从而导致内存泄露。。 这种牛角尖要自己拐过来还真是困难呢谢谢了