JAVA中垃圾回收机,只针对NEW出来的对象,那么在Spring中对象是通过ICO生成的那么Spring内部是不是通过finalize()方法来释放内存的?

解决方案 »

  1.   

    楼主你的头像好丑~~~~~
    gc自动回收的吧,finalize()很少看到用
      

  2.   

    通过ICO生成的?怎么生成?还不是得 new, 所以没有区别。对于单例的,因为只有一个,只要还在用,不存在垃圾回收的问题。对于其它的new出来的大量对象,当没有任何有效引用时,会被自动标记为可回收。 然后在下一个垃圾回收调度时被回收掉!
      

  3.   

    lz你把头像换换吧,看到四次了gc 垃圾回收器,有几种算法,你到网上可以查得到,例如:判断对象是否可达,是否为null在spring中,他把对象注入到gc不可到达的地区,所有在spring中的对象一旦被注入就不会被gc回收的,是spring来控制是否回收的。
      

  4.   

     java2000_net 你好!感谢你这段时间给予我的帮助!感谢你咯!还有一个问题`````对于其它的new出来的大量对象,当没有任何有效引用时,会被自动标记为可回收。 然后在下一个垃圾回收调度时被回收掉! 指的是JAVA回收的"标记-清除"那么其中的还有项技术叫"停止-复制" ,在垃圾回收机制中好象是通过两者交互使用的,`那么他们是如何判定的?
      

  5.   

    我都不知道你和java_2000.net  哪个说的对了!!!!!!!!
      

  6.   

    不冲突,对于singleton 的,当然不会被回收了,对于非 singneton的Spring 才不管呢!OVER, 我在前面已经提到了,你没有仔细看吧! singleton = 单例
      

  7.   

    是IOC吧 垃圾收集的精确性主要包括2个方面:(a)垃圾收集器能够精确标记活着的对象(b)垃圾收集器能够精确地定位对象之间的引用关系。前者是完全地回收所有废弃对象的前提,否则就可能造成内存泄漏。而后者则是实现归并和复制等算法的必要条件。所有不可达对象都能够可靠地得到回收,所有对象都能够重新分配,允许对象的复制和对象内存的缩并,这样就有效地防止内存的支离破碎。现在有许多种不同的垃圾收集器,每种有其算法且其表现各异,既有当垃圾收集开始时就停止应用程序的运行,又有当垃圾收集开始时也允许应用程序的线程运行,还有在同一时间垃圾收集多线程运行。 
      

  8.   

    有很多实现方式 也是基于多种算法的

    1、引用计数法(Reference Counting Collector) 2、tracing算法(Tracing Collector) 3、compacting算法(Compacting Collector) 4、coping算法(Coping Collector) 5、generation算法(Generational Collector) 6、adaptive算法(Adaptive Collector) 
    其中的停止-复制算法就是基于copying算法的该算法的提出是为了克服句柄的开销和解决堆碎片的垃圾回收。它开始时把堆分成 一个对象 面和多个空闲面, 程序从对象面为对象分配空间,当对象满了,基于copying算法的垃圾 收集就从根集中扫描活动对象,并将每个 活动对象复制到空闲面(使得活动对象所占的内存之间没有空闲洞),这样空闲面变成了对象面,原来的对象面变成了空闲面,程序会在新的对象面中分配内存。   一种典型的基于copying算法的垃圾回收是stop-and-copy算法,它将堆分成对象面和空闲区域面,在对象面与空闲区域面的切换过程中,程序暂停执行。