zoukankan      html  css  js  c++  java
  • 经典的JAVA内存泄露代码征集

    经典的JAVA内存泄露代码征集
    http://www.javaeye.com/topic/306515
    有没有人总结过一些经典的常见的导致内存泄露的代码。
    如果能将一些比较常见的导致内存泄露的代码整理出来的话,无论对于新手还是在项目组中进行代码检查都是能够省一些力气的吧。
    我先整理两个:
    反模式1:未正确的关闭数据库连接
    public void foo() {
    Connection conn = getConnection();
    Statement stmt = null;
    try {
        conn = getConnection();
        stmt = conn.createStatement();
    } catch (Exception e) {
    } finally {
          close(stmt, conn);
    }
    }
    在上述案例中的第1行代码中,作者已经申请了一个Connection,但在第2行代码中,又申请了一个新的Connection,并且丢失了第 一次申请的connection的引用,至此,当程序每调一次foo方法,将导致申请一个新的Connection而没有释放它,如此一来,当数据库达到 能够承受的最大连接数时,将导致整个应用的运行失败。
    反模式2:
    public class Stack {
        private Object[] elements;
        private int size = 0;
        public Stack(int initialCapacity) {
              this.elements = new Object[initialCapacity];
        }
       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) {
                   Object[] oldElements = elements;
                     elements = new Object[2 * elements.length + 1];
                   System.arraycopy(oldElements, 0, elements, 0, size);
             }
    }
    }
    这个程序中潜伏着一个问题。不严格地讲,这个程序有一个“内存泄漏”,随着垃圾回收器活动的增加,或者由于不断增加的内存占用,程序性能的降低会 逐渐表现出来。在极端情况下,这样的内存泄漏会导致磁盘分页,甚至导致程序失败( O u t O f M e m o r y E r r o r错误),但是,这样的失败情形相对比较少见。

    这种类似的东西,有没有人专门整理过啊,
    期待有人能够共享一下。
  • 相关阅读:
    git 备忘录
    模拟HTTP协议接收请求并返回信息
    微信公众号支付回调页面处理asp.net
    WinForm下判断文件和文件夹是否存在
    C# 如何判断ie版本号和获取注册表中的信息
    【转】GDI+中发生一般性错误的解决办法
    c# winform 获取当前程序运行根目录
    模拟按下某快捷键:keybd_event使用方法
    如何使用存储过程来实现分页功能
    用ASP.NET实现下载远程图片保存到本地的方法 保存抓取远程图片的方法
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400810.html
Copyright © 2011-2022 走看看