`

第6条:消除过期的对象引用

    博客分类:
  • java
阅读更多
    因为我是做Java开发,所以几乎没有关心过内存的问题,反正有垃圾回收机器来管。这也是做Java比做C和C++轻松的一点。但是看了这一条后,我的想法开始转变了。
先看一下书中给出的示例:
public cluass Stack{
    private Object[] elements;
    private int size = 0;
    private static final int DEFAULT_INITAIL_CAPACITY = 16;
    
    public Stack(){
        elements =  new Object[DEFAULT_INITAIL_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);
}
}




    这段程序无论如何测试,它都会成功通过。但是有可能内存泄漏。如果一个栈先增长然后收缩,那从栈中弹出的对象不会被回收,即使这些对象不再被引用。
怎么来修复这类问题呢?很简单,就是在对象引用过期的地方清空这些引用就ok了。
public Object pop(){
    if(size == 0)
        throw new EmptyStackException();
    Object result = elements[--size];
    elements[size] = null;//清除已过期的引用
    return result;
    
}




    那么什么时候应该考虑内存的问题?书中是这么写的:一般而言,只要类是自己管理内存,程序员就应该警惕内存泄漏问题。一旦元素被释放掉,则该元素中包含的任何对象引用都应该被清空。

    内存泄漏还有两种情况:
       1、缓存
       2、监听和其他回调
分享到:
评论

相关推荐

    面试官:Redis 过期删除策略和内存淘汰策略有什么区别?.doc

    Redis 过期删除策略和内存淘汰策略的区别 Redis 是一个高效的 NoSQL 数据库,可以对 key 设置过期时间,以便删除已过期的键值对。然而,Redis 还有一个内存淘汰策略,用于删除 Redis 中的键值对以释放内存。那么,...

    npm-check:检查过期、错误、无用的依赖.zip

    npm-check 是一个非常实用的开源工具,用于帮助Node.js开发者检查他们的项目中是否存在过期、错误或无用的依赖项。这个工具对于维护项目代码的健康性和安全性至关重要,因为过时的依赖可能会引入已知的安全漏洞,而...

    信用证及附属单据审核规定.DOC

    - 第六条:客户出具的单据需在出货前一天交至业务管理部门,以防止延误出货和结汇。 - 第七条:单证审核一致后,财务部门根据审核意见开具内部货物调拨单,用于出口报关。 - 第八条:出货后,业务部门需提交详细...

    虫草根过期域名工具

    过期域名工具,如“虫草根过期域名工具”,是网络从业者常用的一种软件或服务,主要用于寻找即将或已经过期的互联网域名。这些工具在IT行业中的应用广泛,尤其对于域名投资者、SEO优化人员以及网站重建者来说,具有...

    effective java 读书笔记

    - Item6:消除过期对象引用,避免内存泄漏。及时将不再使用的对象设置为null,使其可以被垃圾收集器回收。 3. **处理对象生命周期** - Item7:Java中的finalizers用于清理对象资源,但不应依赖其执行,因为它们...

    资源过期资源过期资源过期资源过期

    资源过期资源过期资源过期资源过期资源过期资源过期资源过期资源过期

    JSP内置对象

    6. **out对象**: - out对象负责将内容写入HTTP响应。它是PrintWriter的一个实例,可以用来输出文本、HTML或其他内容。 7. **config对象**: - config对象包含了JSP页面的初始化参数。这些参数可以在web.xml配置...

    memcached过期问题

    在Memcached中,设置过期时间是管理缓存对象生命周期的重要方式。过期时间可以确保缓存的数据在特定时间后不再有效,从而强制重新获取最新数据。 在Memcached的Java客户端中,设置过期时间有两种常见的表示方法: ...

    技术查询过期域名

    6. **价值评估**:过期域名的价值取决于多个因素,包括关键词相关性、SEO权重、历史流量等。因此,对过期域名进行综合评估是决定是否值得投资的关键。 7. **域名拍卖**:许多过期的优质域名会被放到拍卖平台上,...

    第6章 ASP.NET 2.0内置对象.ppt

    6. **Server对象**: - **Server对象**提供了一系列辅助方法,用于URL编码解码、文件路径转换等服务器端操作。 7. **Cache对象**: - **Cache对象**允许开发者缓存数据,提高应用程序性能。它可以缓存页面、数据...

    飞鹰批量查询过期域名免费版.rar

    过期域名批量查询工具,如“飞鹰批量查询过期域名免费版”,是网络创业者和域名投资者常用的软件。这类工具的主要功能是帮助用户快速、高效地查找即将或已经过期的域名,以便在它们被释放回公共注册池之前进行抢注。...

    过期域名批量查询工具

    过期域名批量查询工具是一种非常实用的软件,主要用于帮助用户快速、高效地查找那些已经到期或即将到期的互联网域名。这种工具在域名投资、网站重建、SEO优化等领域有着广泛的应用,因为过期的域名可能携带一定的...

    Python趣味代码实现: 绘制过期、俄罗斯方块、人脸识别等 [源代码]

    六.Python 25行代码实现人脸识别 参考资料: 知乎 - 可以用 Python 编程语言做哪些神奇好玩的事情? 知乎 - 学习Python的迷茫,如何高效有趣地学习Python? 知乎 - 想知道大家都用python写过哪些有趣的脚本?

    草根过期域名查询

    6. **域名抢注**:一旦过期域名被释放,抢注服务可以帮助用户在第一时间尝试注册,草根过期域名查询工具可能提供此类服务或提醒功能。 7. **反向WHOIS查询**:通过查询工具,用户还可以查找域名过去的持有者信息,...

    docker部署rancher证书过期问题解决方案

    在Docker环境中部署Rancher时,可能会遇到Rancher证书过期的问题,这将导致Kubernetes集群内部的通信出现异常。以下是一个详尽的解决方案,涵盖了问题的原因、异常现象以及具体的解决步骤。 **问题原因** Rancher在...

    Java弱引用与WeakHashMap

    在《Effective Java 2nd Edition》中,第6条“消除过期的对象引用”提到,虽然Java有垃圾回收机制,但是只要是自己管理的内存,应该警惕内存泄露的问题,例如的对象池、缓存中的过期对象都有可能引发内存泄露的问题...

    ASP 内置6大对象介绍

    6. Session对象:Session对象用于跟踪用户的会话状态,每个用户都有自己的Session对象,可以在会话期间存储特定于用户的信息。例如,购物车信息、用户登录状态等。Session对象的生命周期是可配置的,但默认情况下,...

    Java对象池实现源码

    // 其他扩展方法,如检查对象状态、清理过期对象等 } ``` 在这个例子中,我们定义了一个泛型对象池,通过`ObjectFactory`接口来创建对象。`borrowObject`方法负责从池中取出一个对象,`returnObject`方法则将对象...

    信用证及附属单据审核规定

    - 第六条:客户出具的单据需提前一天提供给业务管理部门核对,不符点或未及时送达的单据不得出货。 - 第七条:单证相符时,财务部门根据业务管理部门的审核意见开具内部调拨单,用于出口报关。 - 第八条:出货后...

    过期域名查询软件_草根过期域名工具(已备案域名) v10.2.zip

    草根过期域名查询工具主要提供今日过期的域名查询/一天前过期域名查询/二天前过期域名查询/一天后过期域名查询/二天后过期域名查询/三天后过期域名查询 草根过期域名工具(功能介绍): 每日更新的数据为: 当日...

Global site tag (gtag.js) - Google Analytics