包含静态成员的类实例的垃圾收集

3 java static garbage-collection

我对包含静态成员的类实例的Java垃圾收集感到有点困惑:

有些帖子说不会收集含有静态参考文献的类型,其他人则表示会收集.

我需要一个类实例(比如AA类)来共享对另一个类型的引用(它是一个SQL数据源):当第一次访问AA静态类成员时创建DS,而AA实例使用此内部的共享DS他们获得连接的方法.问题是:

  1. 静态DS会阻止AA实例被垃圾收集吗?
  2. 如果我将AA实例置为null并且它被垃圾收集,那么DS也会是gc吗?
  3. 从AA moethods中获取此静态DS的连接是线程安全的吗?

在我看来,静态DS不应该被垃圾收集,因为它的类成员不是实例成员,而应该收集AA实例.无论如何,我想得到更有经验的java程序员的意见.

Rub*_*ben 5

  1. 静态引用不会阻止AA实例被垃圾回收.

  2. 如果静态数据源不再被引用,则它将仅被垃圾收集.例如,在设置AA.DS = null之后,可以收集原始数据源.删除对所有AA实例的引用将无济于事,因为静态DS引用仍然有效.

  3. 这取决于你如何编码.这在设计上不是线程安全的.