`
12616383
  • 浏览: 51685 次
  • 性别: Icon_minigender_1
  • 来自: 待定
社区版块
存档分类
最新评论

我的 effective java -- 6.消除过期的对象引用

 
阅读更多

 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

分享到:
评论

相关推荐

    最新版linux apache-maven-3.8.3-bin.tar.gz

    之后,用户可以通过`mvn help:effective-pom`查看生效的POM配置,或使用`mvn clean package`执行构建过程。 总之,Apache Maven 3.8.3为Java开发者提供了一个强大的工具,简化了项目的构建和管理。了解并掌握Maven...

    jonykchen#effective-java-3rd-chinese#82. 文档应包含线程安全属性1

    如果这些假设是错误的,生成的程序可能缺少足够的同步(详见 78 条)或过度的同步(详见 79 条)。无条件线程安全 — 该类的实例是可变的,但是该类具有足够的内

    jicheng400#effective-java-3rd-chinese#64. 通过接口引用对象1

    声明时应养成这样的习惯:// Good - uses interface as typeSet<Son> sonSet = new LinkedHashSet

    PyPI 官网下载 | fsm_effective_stress-1.0.0.tar.gz

    《PyPI官网下载 | fsm_effective_stress-1.0.0.tar.gz》 在Python的世界里,包管理器PyPI(Python Package Index)扮演着至关重要的角色,它为开发者提供了一个集中化的地方来发布、查找和安装Python软件包。本资源...

    liao-hao#effective-Java-1#04.使用私有构造方法执行非实例化1

    只有当类不包含显式构造方法时,才会生成一个默认构造方法,因此可以通过包含一个私有构造方法来实现类的非实例化:// 不可实例化的程序类// 禁止默认构造函数以实现

    effective-go-zh-en-gitbook.rar

    《Effective Go》是一本由Google官方发布的编程指南,主要针对Go语言进行深入讲解,旨在帮助开发者写出更加高效、可读性更强的Go代码。这本书包含了多个实践性的建议和技巧,涵盖了Go语言的基础语法、并发机制、错误...

    hheuii#effective-java-3rd-chinese#43. 方法引用优于lambda表达式1

    例如,考虑这段代码,它被假定出现在一个名为 GoshThisClassNameIsHumongous 的类中:这个 lambda 类似于等价于下面的代码:使用方

    effective-java.pdf

    标题《effective-java.pdf》表明本文档是关于Java编程语言的实践指南,而描述说明了这是一份根据网上资源翻译后的HTML版本,经过转换形成的PDF文件,其内容可供参考。标签“java”指明文档内容与Java编程语言紧密...

    RW-KERNEL-SW-FS.pdf

    6. 有效宏(Effective Macros)可能是指在内核编程中用到的宏,它们可以提高代码的抽象性和可重用性,同时使某些操作变得更加简洁高效。 由于文档内容不完整,以上知识点的概括可能并不全面,实际内容可能还包括了...

    apache-maven-3.6.3.rar

    - `mvn help:effective-pom` 显示项目的有效POM。 - `mvn dependency:tree` 展示项目依赖树。 - `mvn site` 生成项目站点文档。 - `mvn install` 将项目安装到本地仓库,供其他项目引用。 **最佳实践:** 1. 保持...

    Effective-STL-revised.rar

    《Effective STL》是Scott Meyers撰写的一本关于标准模板库(Standard Template Library,STL)的经典著作,书中详细探讨了如何高效、正确地使用STL。这本书的修订版,"Effective STL-revised.rar",包含了对原书...

    [计算机科学经典著作].Addison.Wesley.-.Meyers.-.More.Effective.C++.1st.Edition.pdf

    书籍[计算机科学经典著作].Addison.Wesley.-.Meyers.-.More.Effective.C++.1st.Edition.p

    Effective-Java-2nd-Edition-(May-2008).zip_effective java

    《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,第二版发布于2008年。这本书旨在提供实用的编程指导,帮助开发者写出更高效、更可维护的Java代码。以下是对书中核心知识点的详细解读: 1. *...

    Effective Objective-C 2.0.pdf

    《Effective Objective-C 2.0》是一本由Mattt Thompson编著的面向Objective-C程序员的指南书籍,旨在帮助开发者写出更高效、更可靠、更具可维护性的代码。这本书深入探讨了Objective-C编程语言的最佳实践和设计模式...

    spring-web.5.0.jar

    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...

    apache-maven-3.5.4-bin.zip.rar

    例如,`mvn help:effective-pom`可以显示项目的实际生效POM,帮助理解Maven如何解析和合并依赖。`mvn dependency:tree`则会展示项目及其所有依赖的树形结构,便于分析依赖关系。 总之,Apache Maven 3.5.4为Java...

Global site tag (gtag.js) - Google Analytics