码迷,mamicode.com
首页 > 其他好文 > 详细

第二章:创建和销毁对象。ITEM6:消除过期的对象引用。

时间:2014-08-26 09:46:15      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   java   os   使用   io   ar   div   

 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:消除过期的对象引用。

标签:style   blog   color   java   os   使用   io   ar   div   

原文地址:http://www.cnblogs.com/twoslow/p/3936462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!