6.消除过期的对象引用
例子:
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];
}
private void ensureCapacity(){
if(elements.length == size){
elements = Arrays.copyOf(elements,2 * size + 1);
}
}
}
在支持垃圾回收的语言中,内存泄露是很隐蔽的。如果一个对象的引用被无意识的保留起来了,那么垃圾回收机制不仅不会处理这个对象,而且也不会处理被这个对象所引用的所有其他对象。即时只有少量的几个对象引用被无意识的保留下来,也会有许许多多的对象呗排除在垃圾回收机制之外,从而对性能造成潜在的重大影响。
此类问题的修复方法:一旦对象引用已经过期,只需清空这些引用即可,程序会立即抛出NullPointerException异常。
消除引用最好的方法是让包含该引用的的变量结束其生命周期。
内存泄露的诱因:
1 只要类是自己管理内存,就应该警惕内存泄露问题。如例中的‘elements’
2 内存泄露来源于缓存,一旦你吧对象引用放到缓存中,很容易遗忘,导致长期存在于缓存中。
处理方法:可以使用WeakHashMap ,或者由一个后台线程(Timer或者ScheduledThreadPoolExcutor)来完成,或者也可爱给缓存增加新条目的时候进行清理
3源于监听器和其他回调的内存泄露。如果你实现一个API,客户端在这个API中注册回调,却没有显性的取消注册,会造成沉积。
内存泄露剖析工具:Heap Profiler
分享到:
相关推荐
之后,用户可以通过`mvn help:effective-pom`查看生效的POM配置,或使用`mvn clean package`执行构建过程。 总之,Apache Maven 3.8.3为Java开发者提供了一个强大的工具,简化了项目的构建和管理。了解并掌握Maven...
如果这些假设是错误的,生成的程序可能缺少足够的同步(详见 78 条)或过度的同步(详见 79 条)。无条件线程安全 — 该类的实例是可变的,但是该类具有足够的内
声明时应养成这样的习惯:// Good - uses interface as typeSet<Son> sonSet = new LinkedHashSet
《PyPI官网下载 | fsm_effective_stress-1.0.0.tar.gz》 在Python的世界里,包管理器PyPI(Python Package Index)扮演着至关重要的角色,它为开发者提供了一个集中化的地方来发布、查找和安装Python软件包。本资源...
只有当类不包含显式构造方法时,才会生成一个默认构造方法,因此可以通过包含一个私有构造方法来实现类的非实例化:// 不可实例化的程序类// 禁止默认构造函数以实现
《Effective Go》是一本由Google官方发布的编程指南,主要针对Go语言进行深入讲解,旨在帮助开发者写出更加高效、可读性更强的Go代码。这本书包含了多个实践性的建议和技巧,涵盖了Go语言的基础语法、并发机制、错误...
例如,考虑这段代码,它被假定出现在一个名为 GoshThisClassNameIsHumongous 的类中:这个 lambda 类似于等价于下面的代码:使用方
标题《effective-java.pdf》表明本文档是关于Java编程语言的实践指南,而描述说明了这是一份根据网上资源翻译后的HTML版本,经过转换形成的PDF文件,其内容可供参考。标签“java”指明文档内容与Java编程语言紧密...
6. 有效宏(Effective Macros)可能是指在内核编程中用到的宏,它们可以提高代码的抽象性和可重用性,同时使某些操作变得更加简洁高效。 由于文档内容不完整,以上知识点的概括可能并不全面,实际内容可能还包括了...
- `mvn help:effective-pom` 显示项目的有效POM。 - `mvn dependency:tree` 展示项目依赖树。 - `mvn site` 生成项目站点文档。 - `mvn install` 将项目安装到本地仓库,供其他项目引用。 **最佳实践:** 1. 保持...
《Effective STL》是Scott Meyers撰写的一本关于标准模板库(Standard Template Library,STL)的经典著作,书中详细探讨了如何高效、正确地使用STL。这本书的修订版,"Effective STL-revised.rar",包含了对原书...
书籍[计算机科学经典著作].Addison.Wesley.-.Meyers.-.More.Effective.C++.1st.Edition.p
《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,第二版发布于2008年。这本书旨在提供实用的编程指导,帮助开发者写出更高效、更可维护的Java代码。以下是对书中核心知识点的详细解读: 1. *...
《Effective Objective-C 2.0》是一本由Mattt Thompson编著的面向Objective-C程序员的指南书籍,旨在帮助开发者写出更高效、更可靠、更具可维护性的代码。这本书深入探讨了Objective-C编程语言的最佳实践和设计模式...
Developers are constantly challenged with choosing the most effective runtime, programming model and architecture for their application's requirements and team's skill-set. For example, some use cases...
例如,`mvn help:effective-pom`可以显示项目的实际生效POM,帮助理解Maven如何解析和合并依赖。`mvn dependency:tree`则会展示项目及其所有依赖的树形结构,便于分析依赖关系。 总之,Apache Maven 3.5.4为Java...