网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  effective java学习笔记5:消除对过期对象的引用     
  文章作者:未知  文章来源:水木森林  
  查看:108次  录入:管理员--2007-11-17  
 
  java比c++方便的一点就是java有自己的垃圾收集机制。可以自动帮你收集垃圾。但是,这并非意味着使用java我们就不需要考虑内存管理了。
这一点相信很多java程序员都是知道的,就是当一个对象我们决定不再使用的时候,最好可以手动设置它为null。特别是这个object比较耗费资源的时候。
effective java上的例子:
import java.util.*;

// can you spot the "memory leak"?
public class stack {
private object[] elements;
private int size = 0;

public stack(int initialcapacity) {
this.elements = new object[initialcapacity];
}

public void push(object e) {
ensurecapacity();
elements[size++] = e;
}

public object pop() {
if (size==0)
throw new emptystackexception();
object result = elements[--size];
elements[size] = null; // eliminate obsolete reference
return result;
}

/**
* ensure space for at least one more element, roughly
* doubling the capacity each time the array needs to grow.
*/
private void ensurecapacity() {
if (elements.length == size) {
object[] oldelements = elements;
elements = new object[2 * elements.length + 1];
system.arraycopy(oldelements, 0, elements, 0, size);
}
}

public static void main(string[] args) {
stack s = new stack(0);
for (int i=0; i<args.length; i++)
s.push(args[i]);
for (int i=0; i<args.length; i++)
system.out.println(s.pop());
}
}
这是一个简单的实现堆栈数据结构的程序。
这个程序的编译和测试是没有问题的。它的问题存在哪里呢?
在这个程序里,如果这个堆栈先push然后再pop的话,那么弹出来的对象不会被释放。因为栈内部维护着对这个对象永远都不会解除的引用。
我们每次弹出一个对象,都要令element[size]=null;

总结:在拥有自动垃圾收集功能的语言里,我们要特别注意内存管理的问题,因为这个时候内存的溢出问题不会象c plus plus这些那么明显。我们要防范于未然。
另外,根据matrix的经验,inputstreamreader等文件读写类,我们要在set 他们为null的之前,close他们的连接,即调用in.close().然后再in=null;(这里in是一个inputstreamreader等)。
 
 
上一篇: effective java学习笔记4:避免创建重复对象    下一篇: 编写多线程的java应用程序-如何避免当前编程中最常见的问题(1)
  相关文档
里程碑式的革新—全新j2se 1.5新特性简介 11-17
sun 认证多数考生对教材的选择 11-17
thinking in java第三版读书笔记-第八章:接口与内部类 11-17
web应用程序的测试与优化概述 11-16
java学习路径(三)过程篇 11-17
基于JDBC的数据库连接池高效管理策略 04-14
如何轻松提高java代码的性能 11-17
jini和rmi开发中的codebase问题 11-17
robbin的httpsession总结 11-17
在网页上发布统计曲线 11-17
猜数字游戏,我的第一个j2me程序,很多问题,有待于解决 11-17
实现java程序跨平台运行十二个注意事项 11-16
j2ee基础:使用jsf技术开发web应用程序 11-16
apache 2.x与wls7.0集成-windows 11-17
开发java系统程序员要注意的基本知识一 11-17
web框架wings发布 2.0 版本 11-17
触摸java中的包和文档 11-16
struts中不同的action和actionform组合 11-17
java 中文问题 集锦 11-17
apache+tomcat负载平衡设置详解 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息