gpt4 book ai didi

java - 包含静态成员的类实例的垃圾回收

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:16:49 26 4
gpt4 key购买 nike

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

有些帖子说不会收集包含静态引用的类型,其他人说会。

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

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

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

最佳答案

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

  2. 静态数据源只有在不再被引用时才会被垃圾回收。例如。设置 AA.DS = null 后可以收集原始数据源。删除对所有 AA 实例的引用无济于事,因为静态 DS 引用仍然存在。

  3. 这取决于您的编码方式。这在设计上不是线程安全的。

关于java - 包含静态成员的类实例的垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5536372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com