首页 > 代码库 > 第二章:创建和销毁对象。ITEM6:消除过期的对象引用。
第二章:创建和销毁对象。ITEM6:消除过期的对象引用。
1 package com.twoslow.cha2; 2 3 import java.util.Arrays; 4 import java.util.EmptyStackException; 5 6 public class Stack { 7 8 private Object[] elements ; 9 10 private int size = 0; 11 12 private static final int DEFAULT_INITIAL_CAPACITY = 16 ;13 14 public Stack() {15 elements = new Object[DEFAULT_INITIAL_CAPACITY] ; 16 }17 18 public void push(Object e) {19 ensureCapacity() ;20 elements[size++] = e ;21 }22 23 public Object pop() {24 if(size == 0)25 throw new EmptyStackException() ;26 Object result = elements[--size] ;27 /*28 *下列3种情形需要考虑手动处理资源:29 *1) 类是自己管理内存,如例子中的 Stack 类。30 *2) 使用对象缓存机制时,需要考虑被从缓存中换出的对象,或是长期不会被访问到的对象。31 *3) 事件监听器和相关回调。用户经常会在需要时显示的注册,然而却经常会忘记在不用的时候注销这些回调接口实现类。 32 *33 *34 *当我们调用 pop 方法是,该方法将返回当前栈顶的 elements,35 *同时将该栈的活动区间(size)减一,36 *然而此时被弹出的 Object 仍然保持至少两处引用,37 *一个是返回的对象,另一个则是该返回对象在 elements 数组中原有栈顶位置的引用。38 *这样即便外部对象在使用之后不再引用该 Object,那么它仍然不会被垃圾收集器释放,久而久之导致了更多类似对象的内存泄露39 */40 elements[size] = null ;41 return result;42 }43 44 private void ensureCapacity() {45 if(elements.length == size) 46 elements = Arrays.copyOf(elements, 2 * size + 1) ;47 }48 49 }
第二章:创建和销毁对象。ITEM6:消除过期的对象引用。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。