垃圾收集和反思

我想知道当你有使用得到一些字段值反映一类垃圾回收是如何工作的。 是怎样的JVM知道,这些字段中的值引用是可访问的,因此不符合垃圾收集在目前,当正式的语言语法不用于访问它们?

一个小片段说明问题(虽然反射一直在这里过分强调):

/** * */ import java.lang.reflect.Field; public class B { protected B previous = null, next = null; /** * */ public B(B from) { this.previous = from; } public void transition(B to) { this.next = to; } public B next() { try { Field f = getClass().getField("next"); f.setAccessible(true); try { return (B)f.get(this); } finally { f.setAccessible(false); } } catch (Exception e) { throw new IllegalStateException(e); } } public B previous() { try { Field f = getClass().getField("previous"); f.setAccessible(true); try { return (B)f.get(this); } finally { f.setAccessible(false); } } catch (Exception e) { throw new IllegalStateException(e); } } }

干杯,
克里斯

--------------解决方案-------------

如果您正在访问一个实例字段,然后你仍然需要在实例的引用。 会有什么异常有关GC该案例。

要访问对象的字段,你必须拥有该对象的引用。 如果您是通过反射访问它或直接不会对你是否有很强的参考对象的任何差异。

这是一个有点古怪的测试用例:你使用反射来访问“本”。 根据定义,“本”,在声明类的一个实例方法一起使用时,所以不会GCed是活的。

但更重要的是,简单的反射让您操作领域,等等。在对象,你已经引用。 这是关键 - FF你可以给反映情况来考察,你清楚还是要对对象的引用,从而保持活着。

分类:java的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.781 (s). 10 q(s)