文档章节

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

t
 twoslow
发布于 2014/09/04 15:03
字数 392
阅读 8
收藏 0
 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 }

 

© 著作权归作者所有

t
粉丝 0
博文 15
码字总数 6644
作品 0
南开
私信 提问
《Effective Java》读书笔记

Effective Java读书笔记 第一章:引言 第二章:创建和销毁对象 第一条:创建对象的方式 1、构造器 2、 静态方法 3、构建器 第三条::强化singleton 1、三种方式实现单例 枚举实现(最佳方式)...

磊神Ray
2011/09/06
195
0
《Effective Java 第三版》目录汇总

经过反复不断的拖延和坚持,所有条目已经翻译完成,供大家分享学习。时间有限,个别地方翻译得比较仓促,希望有疑虑的地方指出批评改正。 第一章简介 忽略 第二章 创建和销毁对象 1. 考虑使用...

M104
04/04
0
0
Effective Java 第三版——7. 消除过期的对象引用

Tips 《Effective Java, Third Edition》一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8...

M104
2017/12/27
0
0
effective java之创建与销毁对象

最近朋友推荐了一本书《Effective Java》,觉得写得不错,写点总结笔记,以备后用。 一、创建对象 1、考虑静态工厂代替构造器 优点:(1)有明确名称。可以理解成,定义的静态方法可以给出明...

kyle1970
2012/10/31
209
0
第2章 创建和销毁对象

本章的主题是创建和销毁对象:何时以及如何创建对象,何时以及如何避免创建对象,如何确保它们能够适时地销毁,以及如何管理对象销毁之前必须进行的各种清理动作。   获取类的实例有两个方...

浣雨笑笑生
2016/03/02
64
0

没有更多内容

加载失败,请刷新页面

加载更多

在docker容器中使用非root用户执行脚本 (

应用容器化之后,在docker容器启动时,默认使用的是root用户执行命令,因此容器中的应用默认都是使用root用户来运行的,存在很高的安全风险,那么如何能够使用非root的业务用户来运行应用呢,...

dragon_tech
11分钟前
2
0
那些能帮助你提升十倍开发效率的优质工具

Java世界中存在着很多工具,从著名的IDE(例如Eclipse,NetBeans和IntelliJ IDEA)到JVM profiling和监视工具(例如JConsole,VisualVM,Eclipse Memory Analyzer等)。 在本文中,我将重点介...

乱世当空
13分钟前
4
0
JavaScript面试题总结系列(二)

2. JavaScript对象 2.1 内置对象 Object是JavaScript中所有对象的父对象; 数据封装类对象:Object、Array、Boolean、Number、String; 其他对象:Function、Arguments、Math、Date、RegExp、...

张森ZS
20分钟前
2
0
Mac部署hadoop3(伪分布式)

环境信息 操作系统:macOS Mojave 10.14.6 JDK:1.8.0_211 (安装位置:/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home) hadoop:3.2.1 开通ssh 在"系统偏好设置"->"共享......

程序员欣宸
21分钟前
4
0
windows下disruptor源码由gradle工程转maven工程

github上下载disruptor源码工程,版本为3.3.2。 下载gradle的1.12版本的zip包。注意高版本的gradle会编译报错的,因为在disruptor工程中build.gradle文件中显示的gradle版本为1.12。 配置win...

zjg23
24分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部