首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

温习JAVA GC 有感

2012-10-26 
复习JAVA GC 有感感悟:+GC是怎样判断一个对象是垃圾(已经没用了)? 总体思想大概是:把一个对象看成一点,而

复习JAVA GC 有感
感悟:
+GC是怎样判断一个对象是垃圾(已经没用了)?
总体思想大概是:把一个对象看成一点,而一个对象A对另一个对象B的引用则看出是A到B的有向边。GC从main出发,把整个应用程序的对象做映射,那么就有一个有向图,图中从main或子线程对象为起点不可达的点都视为“垃圾”。

+GC是怎么实现以上判断并管理内存?
GC实现以上的策略有许多种,大部分资料在网上都能找到,IBM DevelopWorks上大把资料。写出来也很长... ...
GC回收,对我们来说近乎透明,调用System.gc()也只是建议JVM去执行回收,但不一样马上执行,不同的JVM实现,不同的垃圾管理回收策略都会有不同表现,这点不能千篇一律地下定论。

+如何解决内存管理的问题?
  曾几何时,总想去GC,内存吃紧啊... ...!但无数次建议,始终不见效果。某日,高人让我当头棒喝。我试着去寻找另一途径,去管理那些垃圾,重复利用那些垃圾,那些散落在程序各地的零碎对象(早已无用,引用存在)。
 

public class LeakyStack {    private Object[] elements = new Object[MAX_ELEMENTS];    private int size = 0;        public void push(Object o) { elements[size++] = o; }        public Object pop() {         if (size == 0)            throw new EmptyStackException();        else {            Object result = elements[--size];            // elements[size+1] = null;            return result;        }     }}

   其中像// elements[size+1] = null;这种细节问题,如果不注意,在LeakyStack对象scope期间,那些对象都不会被视为垃圾,这种视为泄漏。
   另外许多对象,应重复利用...这些看看具体应用场景。其实也只有注意到,实现也不难。

+关于弱引用,软引用的解决方法
   待续... ...

+参考文章
   源于http://www.ibm.com/developerworks/cn/java/j-jtp/
    1 楼 zhaobohao 2008-10-06   good
2 楼 jyasa 2008-10-06   +关于弱引用,软引用的解决方法
   待续... ...

待续????
呵呵! 3 楼 jyasa 2008-10-06   看的正起劲呢

热点排行