社区
Java SE
帖子详情
垃圾回收的优点和原理。并考虑2种回收机制。
ruindays
2008-06-29 04:39:57
垃圾回收的优点和原理。并考虑2种回收机制。
...全文
2281
16
打赏
收藏
垃圾回收的优点和原理。并考虑2种回收机制。
垃圾回收的优点和原理。并考虑2种回收机制。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
njciapple
2010-03-10
打赏
举报
回复
1:垃圾收集是一种从无用对象回收其所占用的内存,并使回收的内存能够被再次利用的机制。
2:无用对象是指它不能被程序中处于活动状态的部分的引用。
3:垃圾收集处于低优先级的线程内,当可用内存较少时运行,但不能保证何时运行。
4:不可能强制运行垃圾回收线程,但是调用语句System.gc()有可能激活垃圾收集程序.
5:在垃圾回收机制中,无法保证对象被垃圾回收的顺序,也无法保证 finalize() 方法被调用的顺序。
6:环形引用关不能阻止对象被回收.例:
class A
{
B b;
}
class B
{
A a;
}
执行下面的程序:
A a=new A();
B b=new B();
a.b=b;
b.a=a;
最后这二个对象都会被回收.
7:我们可以设置引用变量值为null,来暗示垃圾收集线程来回收这引用变量的对象所占用的内存。如果该对象属于某监听器对象,那么,应该首先将这个监听器注销掉,否则该对象可能依然不能被垃圾回收。
8:所用对象都有一个finalize方法,他是从Object类继承下来的,注意j2me中不可用.
9:什么情况下垃圾回收线程会启动?一般规则是:当存在无用对象时,将启用垃圾收集线程,对无用对象占用的内存进行释放。什么是无用对象?一般规则为:没有引用指向的对象称为无用对象.
10:垃圾回收线程的启动时间由虚拟机内嵌算法来进行调度,程序员无法直接调度它,它的运行只有二种情况:系统在运行过程中处于空闲状态和内存资源使用不足。
11:无用对象判断方法补充:沿着对象的引用的被饱含关系追溯不到根对象或活动线程时,则这个对象被称为无用对象.
如下面所示,对象A、B、C、D、E不是无用对象,而G,H是无用对象.其中main代表根对象.
main
A
C
D
B
E
G
H
12:垃圾回收线程管理的内存区域:在JAVA语言中,内存的分配与其他的语言也是一样的,分为代码区、数据区、堆区、栈区,垃圾回收能够管理的内存区域仅限于堆区.在类中声明的静态数据内存分配在数据区中,因此,静态数据不会被垃圾回收线程回收.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jsljn272/archive/2005/11/21/533677.aspx
悠然见蓝山
2010-03-09
打赏
举报
回复
Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
Sou2012
2008-06-30
打赏
举报
回复
[Quote=引用 4 楼 lzx6169936 的回复:]
无需自己管理内存
并且编写者只能催促垃圾回收不能 不能让内存立即回收
[/Quote]
KKK2007
2008-06-29
打赏
举报
回复
垃圾
cursor_wang
2008-06-29
打赏
举报
回复
回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
zhj92lxs
2008-06-29
打赏
举报
回复
关注
胡矣
2008-06-29
打赏
举报
回复
这里有一段关于垃圾回收的
http://blog.csdn.net/yirentianran/archive/2008/06/12/2537985.aspx
goodmrning
2008-06-29
打赏
举报
回复
[Quote=引用 7 楼 java2000_net 的回复:]
在精华区,有一篇【垃圾回收全攻略】的文章。你去参考一下吧!
[/Quote]
ilrxx
2008-06-29
打赏
举报
回复
java是自动垃圾回收
老紫竹
2008-06-29
打赏
举报
回复
在精华区,有一篇【垃圾回收全攻略】的文章。你去参考一下吧!
Ant
2008-06-29
打赏
举报
回复
虚拟机规范中有讲到垃圾回收的各种算法,印象比较深的是火车算法,给大家找了点资料:
火车算法的基本思路:
首先,成熟对象空间被组织成为多辆火车,每辆火车挂有多个车厢。每个车厢就是一个固定大小的内存区域。火车按照创建顺序被编号为1,2,3…,车厢也按照创建顺序被编号为1,2,3…。一般的描述一个车厢为n.m,表示为第n辆火车的第m个车厢。
成熟空间的对象总是从年轻代中复制过来的,不论何时需要将对象提升到成熟代时,这些对象总是被挂接到最大火车的最末车厢,或者挂接到新创建的一辆火车中。
火车算法由虚拟机调度,在合适的时间来进行GC。在进行一次火车算法GC中,算法首先检查编号为1的火车(最先创建的火车),是否存在来自外部的对最小火车中对象的引用(包括Root及其他的火车、年轻代的对象等),如果不存在任何的对火车中对象的引用,那么整辆火车中的对象全部是垃圾,可以销毁。第1号火车销毁后,第2号火车变成第1号,与此顺推。
如果存在对最小火车的引用,那么火车算法检查该火车的1号车厢(最早创建的车厢),并把所有被外部车厢引用的对象复制到其他车厢中,当所有的被外部引用的对象都复制完成后,剩余的对象就全部是垃圾,可以被销毁。
复 制过程是这样进行的:如果这个对象被另外一辆火车中对象所引用,那么这个对象被复制到那辆火车中(如果火车已经满了,那么为它新挂一个车厢)。否则,这个 对象被复制到当前火车的尾部(如果需要,为当前火车新挂一个车厢),在复制过程中,所有指向这个对象的引用也全部更新,并指向新的位置。当对象复制到新的 车厢后,所有在对象中引用得再远1号车厢的对象也被全部的复制到该辆火车的尾部。
这个复制过程最大的优势就是对大型环状对象的收集效率,比如说在一次DOM解析过程中,会创建大量的DOM对象,这些对象可能会进入到成熟对象空间中的多辆火车中。由于复制过程总是保持相关联对象在同一列火车中,因此,最后这些对象会放到一辆火车中,当火车中的其他对象被销毁后,剩余的DOM对象会成为整辆火车的全部,而被集中销毁。
由于火车算法每次支队第1号火车或者第1号火车的第1号车厢进行垃圾回收,因此,其时间开销相对较低,导致的停顿时间较短,比较适合于对停顿时间要求苛刻的应用场景。
但实际上,火车算法的效率并不高,在JDK5.0中,就不再推荐使用了。
End!
一般程序员需要知道的就是当JVM发现有一个对象不会被任何引用所指向的时候,就会回收这个对象
网站推广优化yetaoaiueo
2008-06-29
打赏
举报
回复
面试么
thinking in java
lzx6169936
2008-06-29
打赏
举报
回复
无需自己管理内存
并且编写者只能催促垃圾回收不能 不能让内存立即回收
our651
2008-06-29
打赏
举报
回复
thinking in java 3th 中有比較完整的說明
垃圾
回收
的
优点
和
原理
。并
考虑
2
种
回收
机制
垃圾
回收
的
优点
和
原理
。并
考虑
2
种
回收
机制
与C语言开发人员需要手动进行内存资源的释放不同,Java提供
垃圾
回收
机制
,自动进行GC,将开发人员从容易犯错的内存资源管理中解放出来。
原理
:当某个一个对象,没有任何引用指向它的时候,那么它就满足
垃圾
回收
的条件,在适当的时候,JVM虚拟机进行GC将其
回收
,释放空间,以供后续再利用。 两
种
常见的
回收
机制
: 定时
回收
每隔30分钟进行一次
回收
,这
种
机制
的弊...
垃圾
回收
的
优点
和
原理
?并
考虑
2
种
回收
机制
。
Java 语言中一个显著的特点就是引入了
垃圾
回收
机制
,使 c++程序员最头疼的内存管理 的问题迎刃而解,它使得 Java 程序员在编写程序的时候不再需要
考虑
内存管理。由于 有个
垃圾
回收
机制
,Java 中的对象不再有"作用域"的概念,只有对象的引用才有"作用 域"。
垃圾
回收
可以有效的防止内存泄露,有效的使用可以使用的内存。
垃圾
回收
器通 常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已...
垃圾
回收
的
优点
和
原理
,并
考虑
2
种
回收
机制
答: 1、java语言最显著的特点就是引入了
垃圾
回收
机制
,它使java程序员在编写程序时不再
考虑
内存管理的问题。 2、由于有这个
垃圾
回收
机制
,java中的对象不再有“作用域”的概念,只有引用的对象才有“作用域”。 3、
垃圾
回收
机制
有效的防止了内存泄露,可以有效的使用可使用的内存。 4、
垃圾
回收
器通常作为一个单独的低级别的线程运行,在不可预知的情况下对内存堆中已经死亡的或很长时间没有用过的对象
垃圾
回收
机制
的
优点
和
原理
,并
考虑
两
种
回收
机制
垃圾
回收
机制
的
优点
和
原理
,并
考虑
两
种
回收
机制
1、 java的一个显著的特点就是引入了
垃圾
回收
机制
,使c++程序员最头痛的内存管理问题迎刃而解,它使得java管理员在编写程序的时候不需要
考虑
内存管理,因为有了
垃圾
回收
机制
; 2、 java对象中不再有“作用域”的概念,只有对象的引用才有“作用域”。 3、
垃圾
回收
机制
可以有效的防治内存泄露,有效的使用可以使用的内存。 4...
36、
垃圾
回收
的
优点
和
原理
。并
考虑
2
种
回收
机制
。
36、
垃圾
回收
的
优点
和
原理
。并
考虑
2
种
回收
机制
。 Java语言中一个显著的特点就是引入了
垃圾
回收
机制
,使c++程序员最头疼的内存管理的问题迎刃而解,它使得 Java程序员在编写程序的时候不再需要
考虑
内存管理。由于有个
垃圾
回收
机制
,Java中的对象不再有"作用域" 的概念,只有对象的引用才有"作用域"。
垃圾
回收
可以有效的防止内存泄露,有效的使用可以使用的内存。
垃圾
回收
器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间 没有使用的对象进行清楚和
回收
,程序员不能实时的调用垃圾
Java SE
62,628
社区成员
307,259
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章