effective java读书笔记6:消除过期的对象引用_weixin_34236869的博客-程序员秘密

技术标签: python  java  

解读:如果一个对象的引用没有断开(实际这个对象已经没有用了),这个对象占用的堆空间就不会释放掉,造成不必要的内存泄漏

1、如果一个类是自己管理内存的,则要警惕内存泄漏。

因为既然是自己管理内存,那么对于内存的释放当然也要自己注意。看下面的一个类。

public class Stack {
	private Object[] elements;
	private int size = 0;
	private static final int DEFAULT_INITIAL_CAPACITY = 16;

	public Stack() {
		elements = new Object[DEFAULT_INITIAL_CAPACITY];
	}

	public void push(Object e) {
		ensureCapacity();
		elements[size++] = e;
	}

	public Object pop() {
		if (size == 0)
			throw new EmptyStackException();
		return elements[--size];
	}

	/**
	 * Ensure space for at least one more element, roughly doubling the capacity
	 * each time the array needs to grow.
	 */
	private void ensureCapacity() {
		if (elements.length == size)
			elements = Arrays.copyOf(elements, 2 * size + 1);
	}
}

对于pop方法,一个单元弹出栈后,指向这个单元的引用就过期了,需要清空该引用。改进的方法非常简单,对于该引用指向null即可。

	public Object pop() {
		if (size == 0)
			throw new EmptyStackException();
		Object result = elements[--size];
		elements[size] = null;
		return result;
	}

当然关于清空对象的引用不用改过分地太注意,正如文中说的:清空对象引用只是一种例外,不是一种规范行为。

2、内存泄漏的另一个常见来源是缓存。

这一点的理解比较模糊,后面再补充,这点提到了强引用,弱引用,以及WeakHashMap,以及java.lang.ref包,都是知识盲点,后面补充。

3、内存泄漏的第三个常见来源是监听器和其他回调。

这一点文中简单提了,没搞明白,后面慢慢理解补充。

转载于:https://my.oschina.net/silence88/blog/828788

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34236869/article/details/92069865

智能推荐

01-mybatis-介绍和入门程序_wyaoyao93的博客-程序员秘密

文章目录1 mybatis-介绍1.1 MyBatis是什么2 入门程序2.1 准备工作:2.2 开始编码2.2.1 定义实体2.2.2 构建SqlSessionFactory2.2.3 获取sqlSession实例2.2.4 定义sql映射文件2.2.5 执行sql2.2.6总结2.3 SqlSession对象几点说明3 接口编程1 mybatis-介绍1.1 MyBatis是什么MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JD

在安防领域如此“受宠”的POE交换机到底该怎么选?_weixin_34403693的博客-程序员秘密

POE交换机因为其既能为终端设备传输数据信号又可以为设备提供直流供电的功能,让它在安防领域有着简化布线、节能灵活、安全方便等三大优势。除此之外,能够降低安防工程的施工成本,则是POE交换机在安防行业形势一片大好的基本原因。当又便宜性能又好的事物出现时,普通交换机这种“普通”的设备自然就“失宠”了。但是,POE交换机在市场上有很多,大大小小的品牌,从价格...

在线的棋牌类网络游戏java服务端实现_xak的博客-程序员秘密

自己一直从事页游开发看到一篇做游戏服务端的开发文章自然要收录下.(本文算是记录的蛮详细的,不过具体的性能优化,缓存,消息的处理等都不在其中,整体宏观列出了.)本文来源于网络,好久之前看的,被收藏后一直没有看,今天看了后收藏到网站,原文地址:http://kakaluyi.iteye.com/blog/1489592.一、网络  网络游戏,首先面临的问题当然是如何进行网络通信。首先考虑

MFC CTime类 MFC日期时间格式化参数_mfc 日期格式化_kim-2006的博客-程序员秘密

/* VS 2017 CTime 时间日期格式化参数整理 2021-09-07 %A 星期(英文, Tuesday) %a 星期(缩写, Tue) %B 月份(英文, September) %b\%h 月份(缩写, Sep) %c 星期(英文缩写) 月(英文缩写) 日(0~31) 时(00-23):分(00-59):秒(00-59) 年(数字2021), 如: Tue Sep 7 19:00:00 2021 %Y\%G 年(4位数字, 2021) %y\%g 年(2位数字, 202.

普元云计算-拥抱人工智能,从机器学习开始_weixin_30685029的博客-程序员秘密

转载本文需注明出处:微信公众号EAWorld,违者必究。目录:一、机器学习:一种实现人工智能的方法二、机器学习算法:是使计算机具有智能的关键三、Anaconda:初学Python、入门机器学习的首选四、总结背景:自“阿尔法狗”(AlphaGo)完胜人类围棋顶尖高手后,有关人工智能(AI)的讨论就从未停歇。工业4.0方兴未艾,人工智能引领的工业5.0...

Java实现将文字转换成PNG图片_chaoren316688的博客-程序员秘密

[b]整体思想为:1. 根据文字算出文字需要占用的高和宽2. 画出画布3. 在画布上画出文字[/b]代码如下:[code="java"]public class ImageProducerUtil { public static void main(String[] args) throws Exception { String root...

随便推点

智能中医诊疗系统php代码,智能医疗信息管理系统(中医精华版)_饿狼可乐的博客-程序员秘密

智能医学软件解决了药名、剂量、价格、方剂、历史处方、验方等繁杂、难记、易出错的问题。医生开处方时,只需用鼠标直接调入药品,价格、剂量、服法、用法就智能快速生成;存储处方、调历史处方方式多样,快捷方便。医生用电脑(不打字)3秒钟就可生成处方。该系统集处方、验方、中草药大全、西药大全、中草药方剂大全、疾病诊断大全于一体,他将使你医学水平突飞猛进、与日俱增。他汇入千万方剂,巧妙构思编程,使你轻快准确、开...

Python 标准输入输出 StringIO urllib- 千月的python linux 系统管理指南学习笔记(16)_python 用 stringio 代替 stdin_ADCC千月的博客-程序员秘密

标准输入输出import sys这个概念不难理解,我们在 linux shell 环境下,从键盘输入字符,我们可以看成是标准输入。而系统反馈给你的信息输出在屏幕上,我们看成是标准输出。当然我们还多了一个标准错误,也是输出在屏幕上。除去直接执行脚本不讲,我们和 ipython命令环境 进行的每一次互动,都利用到了标准输入输出。sys.stdin 标准输入

Kuiper 1.1.0 正式发布 - 超轻量 IoT 边缘流处理_EMQX的博客-程序员秘密

日期:2021/1/6Kuiper 团队宣布发布 Kuiper 1.1.0Kuiper 1.1.0 可以从这里下载。EMQ X Kuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源软件,可以运行在各类资源受限的边缘设备上。Kuiper 设计的一个主要目标就是将在云端运行的实时流式计算框架(比如 Apache Spark,Apache Storm 和 Apache Flink 等)迁移到边缘端。Kuiper 参考了上述云端流式处理项目的架构与实现,结合边缘流式数据处理的特点,采用了编

手把手教你 Tableau 绘制漏斗图(二十一)_阿廉在学数据的博客-程序员秘密

手把手教你 Tableau 绘制漏斗图漏斗图适用于业务流程比较规范、周期长、环节多的流程分析,通过漏斗各环节业务数据的比较,能够直观地发现和说明问题所在。绘制流量转化漏斗图数据展示操作步骤1、拖拽维度「阶段」、度量「数量」到行、列功能区;2、拖拽维度「阶段」到标记中的颜色,并进行排序;3、按住 Ctrl 键并点击列功能区的数量向右拖拽;4、修改第二张图为折线图,并设置为双轴(要...

选配高清监控设备(监控系统)交换机_光网视PoE交换机的博客-程序员秘密

高清网络视频监控系统中,经常有朋友反馈画面延时、卡顿等现象,造成这种现象的原因有很多,但大多数情况下还是交换机的配置不够合理,导致带宽不足造成,高清监控设备(监控系统)怎么选配交换机光网视小编来支招。一、根据摄像机的码流和数量来选择1、摄像机码流选择交换机前,首先要弄清楚每路图像占用多少带宽。以早期的IPC举例(H.264视频格式):720P网络摄像机,主码流为23M,子码流为0....

IT外包要向ITIL去取真经_cuixi8660的博客-程序员秘密

IT外包要向ITIL去取真经转载自http://bbs.rohscn.com/thread-4495-1-1.htmlITIL可以使IT外包双方之间的沟通更快捷、高效,提高IT外包的应用效果,为IT外包应用的进一步发展提...

推荐文章

热门文章

相关标签