美文网首页
7. 消除过期的对象引用

7. 消除过期的对象引用

作者: Orange_____ | 来源:发表于2019-01-24 19:22 被阅读0次

当一个对象已经没有用时, 记得要手动消除对象引用, 以避免内存泄露

示例代码

// 创建一个Cache数组, 用于缓存对象
Object[] cache = new Object[16];

// 向缓存中插入对象, 现在缓存中只有一个对象
// 该对象目前被cache对象引用
// 只有当它不被引用, 才会被回收
cache[0] = new Object();

// 当不需要缓存这个对象时, 将该对象的引用关系断掉(设置成null)
cache[0] = null;

这样对象之间的关系被切除, 未被引用的孤儿对象被垃圾回收器标记两次后处理

如果无意中保留了对象引用,那么不仅这个对象排除在垃圾回收之外,而且该对象引用的任何对象也是如此。 即使只有少数对象引用被无意地保留下来,也可以阻止垃圾回收机制对许多对象的回收,这对性能产生很大的影响。

这类问题的解决方法很简单:一旦对象引用过期,将它们设置为null

一般来说,当一个类自己管理内存时,应该警惕内存泄漏问题。 每当一个元素被释放时,元素中包含的任何对象引用都应该被清除。

另一个常见的内存泄漏来源是缓存。一旦将对象引用放入缓存中,很容易忘记它的存在,并且在它变得无关紧要之后,仍然保留在缓存中。对于这个问题有几种解决方案。如果你正好想实现了一个缓存:只要在缓存之外存在对某个项(entry)的键(key)引用,那么这项就是明确有关联的,就可以用WeakHashMap来表示缓存;这些项在过期之后自动删除。记住,只有当缓存中某个项的生命周期是由外部引用到键(key)而不是值(value)决定时,WeakHashMap才有用。

相关文章

  • 7. 消除过期的对象引用

    当一个对象已经没有用时, 记得要手动消除对象引用, 以避免内存泄露 示例代码 这样对象之间的关系被切除, 未被引用...

  • 消除过期的对象引用

    第6条:消除过期的对象引用 1. 为什么要消除过期的对象引用 java虽然有自己的垃圾回收机制,但是并没有那么的智...

  • 消除过期的对象引用

    你能看出以下代码哪里内存泄漏吗? 答案是: pop()方法存在内存泄漏。 内存泄漏可以称为“ 无意识的对象保持(u...

  • 消除过期的对象引用

    什么是过期的对象引用? 我们通过简单的栈实现来引入过期的对象引用。 实际上,这段程序中并没有很明显的错误。无论如何...

  • 消除过期的对象引用

    某些类内部维护着对象的过期引用(指永远也不会再被解除的引用),这些对象不会被当作垃圾回收,产生了内存泄露(这类内存...

  • 消除过期的引用对象

    C或者C++是手工管理内存语言,java语言是自带垃圾回收,程序员的工作就很容易,因为当你用完了对象之后,他会被自...

  • 消除过期的对象的引用

    一、消除过期的对象的引用的好处 好处1、防止内存泄漏,导致磁盘交换,甚至会导致程序失败好处2、如果错误地解除引用,...

  • 1.7消除过期的对象引用

    1.7消除过期的对象引用 1.7.1 ​ 以下代码并没有明显的错误,无论如何测试,它都会成功通过每一项测...

  • Effective Java 第二章

    避免创建不必要的对象 优先考虑使用基本类型而不是装箱类型,要当心无意识的自动装箱 消除过期对象的引用 一旦对象引用...

  • 06-消除过期对象引用

    阅读原文 06-消除过期对象引用   01 - 当你从手工管理内存的语言转换到具有垃圾回收功能的语言的时候,程序员...

网友评论

      本文标题:7. 消除过期的对象引用

      本文链接:https://www.haomeiwen.com/subject/gvuujqtx.html