垃圾回收机制(高分求解)

xiaomaha 2008-04-13 08:19:35
JAVA中垃圾回收机,只针对NEW出来的对象,那么在Spring中对象是通过ICO生成的

那么Spring内部是不是通过finalize()方法来释放内存的?
...全文
101 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmsuccess 2008-04-13
  • 打赏
  • 举报
回复
学习ls
dracularking 2008-04-13
  • 打赏
  • 举报
回复
有很多实现方式 也是基于多种算法的

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算法,它将堆分成对象面和空闲区域面,在对象面与空闲区域面的切换过程中,程序暂停执行。

 
goodmrning 2008-04-13
  • 打赏
  • 举报
回复
学习,顶
xiaomaha 2008-04-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dracularking 的回复:]
是IOC吧 垃圾收集的精确性主要包括2个方面:(a)垃圾收集器能够精确标记活着的对象(b)垃圾收集器能够精确地定位对象之间的引用关系。前者是完全地回收所有废弃对象的前提,否则就可能造成内存泄漏。而后者则是实现归并和复制等算法的必要条件。所有不可达对象都能够可靠地得到回收,所有对象都能够重新分配,允许对象的复制和对象内存的缩并,这样就有效地防止内存的支离破碎。现在有许多种不同的垃圾收集器,每种有其算法且其…
[/Quote]

你这样说垃圾回收是通过很多方式实现的吗?
dracularking 2008-04-13
  • 打赏
  • 举报
回复
是IOC吧 垃圾收集的精确性主要包括2个方面:(a)垃圾收集器能够精确标记活着的对象(b)垃圾收集器能够精确地定位对象之间的引用关系。前者是完全地回收所有废弃对象的前提,否则就可能造成内存泄漏。而后者则是实现归并和复制等算法的必要条件。所有不可达对象都能够可靠地得到回收,所有对象都能够重新分配,允许对象的复制和对象内存的缩并,这样就有效地防止内存的支离破碎。现在有许多种不同的垃圾收集器,每种有其算法且其表现各异,既有当垃圾收集开始时就停止应用程序的运行,又有当垃圾收集开始时也允许应用程序的线程运行,还有在同一时间垃圾收集多线程运行。
xiaomaha 2008-04-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 java2000_net 的回复:]
不冲突,对于singleton 的,当然不会被回收了,对于非 singneton的Spring 才不管呢!

OVER, 我在前面已经提到了,你没有仔细看吧! singleton = 单例
[/Quote]

不太清楚什么叫单例模式?能详细讲解下吗?
老紫竹 2008-04-13
  • 打赏
  • 举报
回复
不冲突,对于singleton 的,当然不会被回收了,对于非 singneton的Spring 才不管呢!

OVER, 我在前面已经提到了,你没有仔细看吧! singleton = 单例
xiaomaha 2008-04-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kokobox 的回复:]
lz你把头像换换吧,看到四次了

gc 垃圾回收器,有几种算法,你到网上可以查得到,例如:判断对象是否可达,是否为null

在spring中,他把对象注入到gc不可到达的地区,所有在spring中的对象一旦被注入就不会被gc回收的,是spring来控制是否回收的。
[/Quote]


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

xiaomaha 2008-04-13
  • 打赏
  • 举报
回复
java2000_net

你好!感谢你这段时间给予我的帮助!感谢你咯!

还有一个问题`````

对于其它的new出来的大量对象,当没有任何有效引用时,会被自动标记为可回收。 然后在下一个垃圾回收调度时被回收掉!

指的是JAVA回收的"标记-清除"

那么其中的还有项技术叫"停止-复制" ,在垃圾回收机制中好象是通过两者交互使用的,`那么他们是如何判定的?
kokobox 2008-04-13
  • 打赏
  • 举报
回复
lz你把头像换换吧,看到四次了

gc 垃圾回收器,有几种算法,你到网上可以查得到,例如:判断对象是否可达,是否为null

在spring中,他把对象注入到gc不可到达的地区,所有在spring中的对象一旦被注入就不会被gc回收的,是spring来控制是否回收的。

老紫竹 2008-04-13
  • 打赏
  • 举报
回复
通过ICO生成的?

怎么生成?还不是得 new, 所以没有区别。

对于单例的,因为只有一个,只要还在用,不存在垃圾回收的问题。

对于其它的new出来的大量对象,当没有任何有效引用时,会被自动标记为可回收。 然后在下一个垃圾回收调度时被回收掉!

J_Factory 2008-04-13
  • 打赏
  • 举报
回复
楼主你的头像好丑~~~~~
gc自动回收的吧,finalize()很少看到用

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧