关于effective java 第六条有些不解。。。 effective java 过期引用内存泄露stack 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public Object pop(){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无法回收这块内存。 这么说,你理解了为什么作者说内存泄露了吧。然后你可以想想你举的这个例子,是不是就是作者所说的内存泄露了呢?哦,,,,好像明白了点了,就是如果有很多类似这样的类,或者每个类都出现这种极端的扩展后收缩的情况,就造成了过多的资源浪费,从而导致内存泄露。。 这种牛角尖要自己拐过来还真是困难呢谢谢了 虽然我收分走人了。但是,memory leak这事,不分大小,就怕和业务有关。一次业务leak 一点点,时间长了,也会导致OOM 亲,帮忙解决一下这个问题 java获取客户端分辨率 急 MyEclipse能运行新建ASP文件吗? 求助,怎么设置JBUTTON大小 图像绘制的问题 关于for循环 这两种写法是一样的吗? 框架结构首次进入页面刷新问题,急!!!! 如何写,在WEB中的拨号程序. 求助:JAVA编程实现这个。 如何在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无法回收这块内存。
这么说,你理解了为什么作者说内存泄露了吧。然后你可以想想你举的这个例子,是不是就是作者所说的内存泄露了呢?哦,,,,好像明白了点了,就是如果有很多类似这样的类,或者每个类都出现这种极端的扩展后收缩的情况,就造成了过多的资源浪费,从而导致内存泄露。。 这种牛角尖要自己拐过来还真是困难呢谢谢了