博览会:
通常,引用计数的缺点是“它无法检测到循环”。但是,在某些情况下,引用计数确实很有用:
class EmergencyPatient {
DoctorPtr doctor;
EmergencyPatient() { doctor = Doctor::acquire(); }
~EmergencyPatient() { Doctor::release(doctor); }
};
现在,在一个比较可靠的世界中,一旦我们不再提到急诊患者,医生就会被释放。在Java的不被引用的世界中,这很大程度上取决于何时对EmergencyPatient进行垃圾收集-并且由于垃圾收集器是世代的,因此EmergencyPatient可以处于较早的一代中,并且长时间不收集。
问题:
对我来说,医生是非常宝贵的资源。其他急诊患者需要医生。但是,对于Java而言,EmergencyPatient对象仅是几个字节的内存。
题:
解决这个问题的正确方法是什么? (我知道有一些资源要在不再使用时立即释放)。
谢谢!
最佳答案
如果您检查了4个参考对象,则当您的对象变为“有资格进行垃圾收集”时,会有一个通知对象。这意味着您不必等待“大型” GC,它可以在次要通行证之一期间让您知道对象是否变得不可访问,即使它位于较早的一代区域中也是如此。
我相信这应该是您尝试做的正确方法。