EffectiveJava(6)消除过期对象的引用
来源:互联网 发布:板块分析软件 编辑:程序博客网 时间:2024/06/01 09:37
消除过期对象的引用
过期引用 – 在操作集合类的时候,未清理过期的对象引用(即:过期引用),常会导致内存泄露.从而报outOfmemory错误.
1.过期对象导致内存泄漏.
2.一旦对象引用过期,清除这些引用
3.如果一个过期对象中引用了其他对象,那么其引用的对象也不会被清除
4.WeakHashMap代表缓存时,过期将自动清除缓存(当所要的缓存项的生命周期是由该键的外部引用而不是值决定时,WeakHashMap才有用处)
5.LinkedHashMap 给缓存添加新条目的时候顺便清理缓存
例子
“`
public class StackMemory {
public Object[] elements;
public int size = 0; //private static final int DEFAULT_INITIAL_CAPACITY = 16; public StackMemory(int DEFAULT_INITIAL_CAPACITY){ elements = new Object[DEFAULT_INITIAL_CAPACITY];}public void push(Object e){ ensureCapacity(); elements[size++] = e;}/** * * @return 让一个栈先增长后收缩,从栈中弹出来的对象永远不会被当做垃圾回收 */public Object pop(){ if(size == 0) throw new EmptyStackException(); //一旦对象引用过期,清空引用 //清空elements[]并返回result 此时result只有 elements[--size]的值(一个) Object result = elements[--size]; elements[size] = null; return result; //直接返回object[] 没有将其清空 //return elements[--size]; }private void ensureCapacity() { // TODO Auto-generated method stub if(elements.length == size){ elements = Arrays.copyOf(elements, 2*size+1); } }
}
测试代码
for (int i = 0; i < 9; i++) {
String str = “testStackMemory” + i;
stackMemory.push(str);
}
String strB = new String((String) stackMemory.pop());
System.out.println(strB + ” “);
System.out.println(stackMemory.elements[8]);
“`如果不清空对象引用的话,将会返回三个testStackMemory8,否则,输出结果为testStackMemory8,null,null
12 0
- EffectiveJava(6)消除过期对象的引用
- EffectiveJava-6 内存泄漏-清楚过期对象的引用
- 6、消除过期的对象引用
- effective java(6) 之消除过期的对象引用
- 消除过期的对象引用
- 消除过期的对象引用
- 消除过期的对象引用
- 消除过期的对象引用
- 消除过期的对象引用。
- 消除过期的对象引用的理解
- 第6条:消除过期的对象引用
- Effective Java 第6条:消除过期的对象引用
- Effective Java (6) - 消除过期的对象引用
- Effective Java 第6条 消除过期的对象引用
- 第6条:消除过期的引用对象
- Effective Java (6) 消除过期的对象引用
- 第6条:消除过期的对象引用
- 第6条:消除过期的对象引用
- JFinal中Config的c3p0连接池语句
- No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
- 495. Teemo Attacking
- Linux常用操作指令
- Wolf and Rabbit
- EffectiveJava(6)消除过期对象的引用
- Ajax技术(XMLHttp)
- WIN10隐藏任务栏和桌面图标(简易实现)
- springMVC中web.xml配置/和/*的区别
- STM8L051之低功耗停机配置问题
- 思维万能体系——申论
- 分类器评价指标
- EffectiveJava(7)避免使用终结方法
- 深度神经网络(DNN)模型与前向传播算法