社区
Java SE
帖子详情
JAVA里对象自动回收机制是怎么实现的,也就是JAVA怎么判断对象需要回收的
jcmok
2004-04-20 10:48:03
JAVA里对象自动回收机制是怎么实现的,也就是JAVA怎么判断对象需要回收的
...全文
205
4
打赏
收藏
JAVA里对象自动回收机制是怎么实现的,也就是JAVA怎么判断对象需要回收的
JAVA里对象自动回收机制是怎么实现的,也就是JAVA怎么判断对象需要回收的
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
r6
2004-04-20
打赏
举报
回复
Object obj = new Object ( ) ;
我们知道,obj为Object的一个句柄。当出现new关键字时,就给新建的对象分配内存空间,而obj的值就是新分配的内存空间的首地址,即该对象的值(请特别注意,对象的值和对象的内容是不同含义的两个概念:对象的值就是指其内存块的首地址,即对象的句柄;而对象的内容则是其具体的内存块)。此时如果有 obj = null; 则obj指向的内存块此时就无用了,因为下面再没有调用该变量了。
请再看以下三种认证考试时可能出现的题型:
程序段1:
1.fobj = new Object ( ) ; 2.fobj. Method ( ) ; 3.fobj = new Object ( ) ; 4.fobj. Method ( ) ;
问:这段代码中,第几行的fobj 符合垃圾收集器的收集标准?
答:第3行。因为第3行的fobj被赋了新值,产生了一个新的对象,即换了一块新的内存空间,也相当于为第1行中的fobj赋了null值。这种类型的题在认证0考试中是最简单的。
程序段2:
1.Object sobj = new Object ( ) ; 2.Object sobj = null ; 3.Object sobj = new Object ( ) ; 4.sobj = new Object ( ) ;
问:这段代码中,第几行的内存空间符合垃圾收集器的收集标准?
答:第1行和第3行。因为第2行为sobj赋值为null,所以在此第1行的sobj符合垃圾收集器的收集标准。而第4行相当于为sobj赋值为null,所以在此第3行的sobj也符合垃圾收集器的收集标准。
如果有一个对象的句柄a,且你把a作为某个构造器的参数,即 new Constructor ( a )的时候,即使你给a赋值为null,a也不符合垃圾收集器的收集标准。直到由上面构造器构造的新对象被赋空值时,a才可以被垃圾收集器收集。
程序段3:
1.Object aobj = new Object ( ) ; 2.Object bobj = new Object ( ) ; 3.Object cobj = new Object ( ) ;
4.aobj = bobj; 5.aobj = cobj; 6.cobj = null; 7.aobj = null;
问:这段代码中,第几行的内存空间符合垃圾收集器的收集标准?
答:第7行。注意这类题型是认证考试中可能遇到的最难题型了。
行1-3分别创建了Object类的三个对象:aobj,bobj,cobj
行4:此时对象aobj的句柄指向bobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。
行5:此时对象aobj的句柄指向cobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。
行6:此时仍没有任何一个对象符合垃圾收集器的收集标准。
行7:对象cobj符合了垃圾收集器的收集标准,因为cobj的句柄指向单一的地址空间。在第6行的时候,cobj已经被赋值为null,但由cobj同时还指向了aobj(第5行),所以此时cobj并不符合垃圾收集器的收集标准。而在第7行,aobj所指向的地址空间也被赋予了空值null,这就说明了,由cobj所指向的地址空间已经被完全地赋予了空值。所以此时cobj最终符合了垃圾收集器的收集标准。 但对于aobj和bobj,仍然无法判断其是否符合收集标准。
总之,在Java语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个:
1.给对象赋予了空值null,以下再没有调用过。 2.给对象赋予了新值,既重新分配了内存空间。 最后再次提醒一下,一块内存空间符合了垃圾收集器的收集标准,并不意味着这块内存空间就一定会被垃圾收集器收集
peter310cn
2004-04-20
打赏
举报
回复
呵呵,在对象上设引用计数不就行了
在程序运行过程(边解析边运行)更新值
当内存空间不足(当然回收时机可以很多中,这只是一种情况)
回收在分配
jcmok
2004-04-20
打赏
举报
回复
那它又怎么知道对象的引用不存在呢?
另外JAVA也会造成内存泄露吗?
oxv
2004-04-20
打赏
举报
回复
当一个对象的引用不存在时,则该对象被认为是不再需要的,那它所占用的内存就会被释放掉喽,它是通过一个专门的收尾机制实现地
JAVA
_API1.6文档(中文)
java
.lang.ref 提供了引用
对象
类,支持在某种程度上与垃圾
回收
器之间的交互。
java
.lang.reflect 提供类和接口,以获得关于类和
对象
的反射信息。
java
.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度...
100家大公司
java
笔试题汇总
答:垃圾
回收
是
Java
中的
机制
,用于
回收
无用的
对象
,释放内存。 13. 在
Java
中,什么时候
对象
可以被垃圾
回收
? 答:
对象
可以被垃圾
回收
,当
对象
不再被引用时。
Java
异常 14. 什么是
Java
中的异常? 答:异常是
Java
中...
一个牛人给
java
初学者的建议
Java
设计时有意避免了C/C++中的指针操作,转而采用了
自动
垃圾
回收
机制
来管理内存。这大大减少了程序员在内存管理上的负担,使他们能够更加专注于业务逻辑的
实现
。垃圾
回收
机制
定期清理不再使用的
对象
,避免了内存...
java
对象
的
回收
机制
我们知道创建
对象
是通过new关键字创建的,创建完成后的
对象
存储在堆内存中,
java
虚拟机能够完成内存的
自动
回收
,那么JVM是在什么情况下
回收
对象
,如何
回收
对象
? 方法区为什么
需要
回收
,它的
回收
和堆内存的
回收
又有...
Java
垃圾
回收
机制
——
回收
对象
Java
垃圾
回收
机制
GC——垃圾
回收
对象
1.垃圾
回收
和引用
对象
2.
判断
对象
是否是垃圾2.1引用计数算法2.2根搜索算法 1.垃圾
回收
和引用
对象
垃圾
回收
是JVM垃圾
回收
器提供的一种用于在空闲时间不定时
回收
无任何
对象
引用的...
Java SE
62,629
社区成员
307,262
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章