国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

消除對過期對象的引用

2019-11-18 12:04:57
字體:
來源:轉載
供稿:網友

  java比c++方便的一點就是java有自己的垃圾收集機制。可以自動幫你收集垃圾。但是,這并非意味著使用java我們就不需要考慮內存治理了。
  這一點相信很多java程序員都是知道的,就是當一個對象我們決定不再使用的時候,最好可以手動設置它為null。非凡是這個object比較耗費資源的時候。
  Effective java上的例子:
  import java.util.*;
  
  // Can you spot the "memory leak"?
  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();
      Object result = elements[--size];
      elements[size] = null; // Eliminate obsolete reference
      return result;
    }
  
    /**
     * Ensure space for at least one more element, roughly
     * doubling the capacity each time the array needs to grow.
     */
    private void ensureCapacity() {
      if (elements.length == size) {
        Object[] oldElements = elements;
        elements = new Object[2 * elements.length + 1];
        System.arraycopy(oldElements, 0, elements, 0, size);
      }
    }
  
    public static void main(String[] args) {
      Stack s = new Stack(0);
      for (int i=0; i<args.length; i++)
        s.push(args[i]);
      for (int i=0; i<args.length; i++)
        System.out.println(s.pop());
    }
  }
  
  這是一個簡單的實現堆棧數據結構的程序。
  這個程序的編譯和測試是沒有問題的。它的問題存在哪里呢?
  在這個程序里,假如這個堆棧先push然后再pop的話,那么彈出來的對象不會被釋放。因為棧內部維護著對這個對象永遠都不會解除的引用。
  我們每次彈出一個對象,都要令element[size]=null;
  
  總結:在擁有自動垃圾收集功能的語言里,我們要非凡注重內存治理的問題,因為這個時候內存的溢出問題不會象c plus plus這些那么明顯。我們要防范于未然。另外,根據的經驗,inputstreamreader等文件讀寫類,我們要在set 他們為null的之前,close他們的連接,即調用in.close().然后再in=null;(這里in是一個inputstreamreader等)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 义乌市| 锡林浩特市| 呼玛县| 桂林市| 青川县| 林芝县| 峨眉山市| 巴东县| 新巴尔虎左旗| 贵定县| 锦州市| 扎鲁特旗| 青川县| 博客| 慈利县| 黄平县| 宁化县| 夏邑县| 勐海县| 延长县| 陆良县| 长丰县| 综艺| 平湖市| 黄大仙区| 云南省| 吴堡县| 隆德县| 伊金霍洛旗| 白沙| 朝阳市| 田东县| 汉阴县| 台东市| 余江县| 平湖市| 北海市| 土默特左旗| 澄江县| 临西县| 海林市|