Jul*_*lio 32 java singleton garbage-collection design-patterns
垃圾收集器何时擦除使用Singleton模式的对象的实例?
对象是否比常规对象更长时间?
如何在Java中手动强制删除/垃圾回收?
谢谢.
Jon*_*eet 43
有一个单例的静态引用,因此在类加载器符合垃圾收集条件之前,它不符合垃圾收集的条件.
你不能强迫任何对象被垃圾收集; 您可以请求垃圾收集器运行,System.gc()但它只是一个请求.
如果你真的想让一个"单例"符合垃圾收集的条件,你可能想要一个方法来将静态变量设置为null(并希望没有别的东西带有引用的副本).显然,下次有人要求一个实例,它需要重新创建......当然,它不是真正的单身人士.
如果你在单例类中保持对它的静态引用,那么引用计数不能降为0,因此不应该收集它.
Java中有一些特殊的对象称为GC根。它们始终是可访问的,从这些根源可以访问的对象也是可访问的。这些GC根目录永远无法进行垃圾回收,从这些根目录可访问的对象也是如此。在Java中,静态变量形成GC根。
Singleton类具有对实例化的Singleton对象的静态引用,因此,除非以Jon Skeet的身份声明,否则加载它永远不会被垃圾回收,因为声明加载此类的上下文(类加载器)本身就有资格进行垃圾回收,在这种情况下,静态引用将不再是GC的根。
我认为这是Java 1.2之前的一个错误,即如果没有全局引用,则可以对单例实例进行垃圾回收,但是在Java 1.2中已解决该问题,并且现在只有在装载了类加载器的情况下,才可以进行垃圾回收这个班是垃圾收集的。
| 归档时间: |
|
| 查看次数: |
9900 次 |
| 最近记录: |