zoukankan      html  css  js  c++  java
  • 内存泄漏典型例子

    Vector v = new  Vector( 10 );  
     for  ( int  i = 1 ;i < 100 ; i ++ ){  
     Object o = new  Object();  
     v.add(o);  
     o = null ;  
     }
    在这个例子中,代码栈中存在Vector 对象的引用 v 和 Object 对象的引用 o 。
    在 For 循环中,我们不断的生成新的对象,然后将其添加到 Vector 对象中,之后将 o 引用置空。问题是当 o 引用被置空后,
    如果发生 GC ,
    我们创建的 Object 对象是否能够被 GC 回收呢?
    答案是否定的。
    因为, GC 在跟踪代码栈中的引用时,
    会发现 v 引用,而继续往下跟踪,就会发现 v 引用指向的内存空间中又存在指向 Object 对象的引用。也就是说尽管 o 引用已经被置空,
    但是 Object 对象仍然存在其他的引用,是可以被访问到的,所以 GC 无法将其释放掉。
    如果在此循环之后, Object 对象对程序已经没有任何作用,
    那么我们就认为此 Java 程序发生了内存泄漏。
  • 相关阅读:
    构建之法阅读笔记03
    构建之法阅读笔记02
    构建之法阅读笔记01
    人月神话阅读笔记03
    人月神话阅读笔记02
    人月神话阅读笔记01
    关于APP“跑跑”
    软件设计模式24
    软件构造9
    软件构造8
  • 原文地址:https://www.cnblogs.com/panxuejun/p/6127744.html
Copyright © 2011-2022 走看看