Item 6 消除过期的对象引用】的更多相关文章

过期对象引用没有清理掉,会导致内存泄漏.对于没有用到的对象引用,可以置空,这是一种做法.而最好的做法是,把保存对象引用的变量清理掉,多用局部变量.   什么是内存泄漏? 在Java中,对象的内存空间回收是由Java垃圾回收器回收的.而Java垃圾回收器判定一个对象能否被回收的依据是,该对象是否可达.如果该对象可达,则垃圾回收器不会回收该对象的内存空间,反之,则回收.垃圾回收器判定一个对象是否可达,是根据该对象的引用链来决定的. 如果没有变量持有指向该对象的引用,那么,该对象就是不可达的.那么,垃…
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 7. 消除过期的对象引用 如果你从使用手动内存管理的语言(如C或c++)切换到像Java这样的带有垃圾收集机制的语言,那么作为程序员的工作就会变得容易多了,因为你的对象在使…
内存泄漏的第一个常见来源是存在过期引用. import java.util.Arrays; import java.util.EmptyStackException; public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[D…
大概看了一遍这个小节,其实这种感觉体验最多的应该是C/C++程序,有多杀少个new就得有多个delete. 一直以为Java就不会存在这个问题,看来是我太年轻. 感觉<Effective Java>里面每句话都是浓缩的精华,第一次看就想要明白是什么,为什么,怎么办,还是再去看看资料,<Effective Java>只是作为一个引言提出这一点. 消除过期对象的引用,推荐先看看博客. 1.内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间…
本文参考 本篇文章参考自<Effective Java>第三版第七条"Eliminate obsolete object references" Memory leaks in garbage-collected languages (more properly known as unintentional object retentions) are insidious 在具备垃圾回收器的语言中,内存泄漏(或称无意识对象保留)往往十分隐蔽,看下面一个自定义栈程序的例子 p…
一.引言 很多人可能在想这么一个问题:Java有垃圾回收机制,那么还存在内存泄露吗?答案是肯定的,所谓的垃圾回收GC会自动管理内存的回收,而不需要程序员每次都手动释放内存,但是如果存在大量的临时对象在不需要使用时并没有取消对它们的引用,就会吞噬掉大量的内存,很快就会造成内存溢出. 二.Java的垃圾回收机制 Java中的对象是在堆中分配,对象的创建有2中方式:new或者反射.对象的回收是通过垃圾收集器,JVM的垃圾收集器简化了程序员的工作,但是却加重了JVM的工作,这是Java程序运行稍慢的原因…
public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_CAPACITY]; } public void push(Object e){ ensureCapacity(); elements[size++] = e; } pu…
消除过期对象的引用 过期引用 – 在操作集合类的时候,未清理过期的对象引用(即:过期引用),常会导致内存泄露.从而报outOfmemory错误. 1.过期对象导致内存泄漏. 2.一旦对象引用过期,清除这些引用 3.如果一个过期对象中引用了其他对象,那么其引用的对象也不会被清除 4.WeakHashMap代表缓存时,过期将自动清除缓存(当所要的缓存项的生命周期是由该键的外部引用而不是值决定时,WeakHashMap才有用处) 5.LinkedHashMap 给缓存添加新条目的时候顺便清理缓存 例子…
<Effective Java>作者是美国的Joshua Bloch,连Gosling都说需要看的书,讨论的是更深层次的Java开发技术,适合于有一定Java基础的人看. 这是一本分享经验于指引您少走弯路的经典著作,针对如何编写高效.设计优良的程序提出了最实用的方针. Item1 考虑用静态工厂方法代替构造器 1.优点 可读性强. 不会每次调用就通过构造器创建一个新的实例. 可以返回原始类型的任何子类型. 2.缺点 只有私有构造器无法被子类化. Item 2 遇到多个构造器参数考虑用构建器Bu…
<Effective Java>阅读笔记,用适合自己理解的方式提炼该书内容.<Effective Java>是一本很实用的书,阅读方法应该是快速的领会,总结,然后应用.而非,一个字一个字去推敲,研究.所以,书呆子们一般都很xx,在我眼里. 2016.07.24作 1,用静态方法替代构造器,下面是很好的例子: public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE…