Pab*_*dez 7 java garbage-collection jvm weak-references
我很想知道这一点,因为这会使它们变得不那么有用.如果是这样,有没有办法让内存在主要GC上仅被"垃圾"弱引用?
我不知道实际发生了什么WeakReference.javadoc没有具体说明清除/破坏它们的"时间尺度".这将使你的问题得到答案(至少在理论上)"它依赖于实现".实际上,JLS规范和javadocs甚至没有提到主要和次要集合.整个主题来自"实施细节"类别.
如果你确实想要GC敏感的引用,那么也许你应该使用一个SoftReference.这描述如下:
"在虚拟机抛出OutOfMemoryError之前,保证对软可访问对象的所有软引用都已被清除.否则,不会对清除软引用的时间或一组此类引用的顺序进行约束.但是,不同的对象将被清除.但是,鼓励虚拟机实现偏向清除最近创建或最近使用的软引用."
在其他地方,软参考被描述为比弱参考更强.这意味着它不太可能被打破; 例如,过度渴望的垃圾收集器.
但请注意,甚至没有谈论主要与次要垃圾收集.
你为什么这么想?您的程序不应该关注主要GC次要和次要GC循环,事实上,在所有JVM/GC配置中甚至不存在这种区别.
WeakReference只要没有对该对象的强引用,s就是可收集的.这可能包括次要的GC.
如果您希望对象在实际内存压力下保持一段时间,请尝试使用SoftReference.