• (32)内存泄漏的潜在危机


    虽然java自身带有一个垃圾回收器gc。但是这个gc只是在适当的时候,当某个对象不再使用,也就是不再被引用时,才会想相应的对象。但有些时候,有些对象的引用可能就会情不自禁的忘记断开引用,而一直处于一种引用的状态,虽然我们已经不用了,但是gc还是无法回收。这个样子迟早会导致堆栈内存的溢出,这个时候就需要我们的手动的把应用断开,为gc回收内存创造机会。这往往更体现了代码的严谨性。

    下面自己手动实现的一个MyStack类,这个类中的pop方法就是要特别注意的。这个栈的底层是维护的一个Object[]数组:

     1 class StackList
     2 {
     3     Object[] elements;
     4     int index = 0;    //当前的索引值
     5     public StackList() {
     6         this.elements = new Object[3];
     7     }
     8     //添加内容
     9     public void add(Object o)
    10     {
    11         //添加元素之前应当先检查当前的容量是否够用
    12         ensureCapacity();
    13         elements[index ++] = o;
    14     }
    15     //出站操作
    16     public Object pop()
    17     {
    18         int tmpIndex = --index;
    19         Object o = elements[tmpIndex];
    20         elements[tmpIndex] = null;    //不用的要赶紧释放 断开引用为 gc回收创造条件
    21         return o;
    22     }
    23     
    24     //检查当前数组的容量是搜狗用
    25     public void ensureCapacity()
    26     {
    27         if(index == elements.length)
    28         {
    29             int newLength = elements.length*2;
    30             elements =  Arrays.copyOf(elements, newLength);
    31         }
    32     }
    33     //获取 当前于都个数
    34     public int size()
    35     {
    36         return index;
    37     }
    38 }
  • 相关阅读:
    js 实现继承的6种方式(逐渐优化)
    http2.0 特性
    http 206请求
    http put post请求区别
    stopPropagation 和stopImmediatePropagation区别
    JavaScript事件流
    BFC特性 形成BFC
    元素高度、宽度获取 style currentStyle getComputedStyle getBoundingClientRect
    三栏布局解决方案
    jquery vue 框架区别
  • 原文地址:https://www.cnblogs.com/OliverZhang/p/6027177.html
Copyright © 2020-2023  润新知