为啥托管语言的GC不在方法结束时立即销毁该方法内new的临时对象(程序员可确定该对象不会被引用)( 二 )


■网友
你可以把gc比做美食城收拾餐台的保洁员,保证每个人离开桌子后餐盘立即被收走,需要增加保洁人员及巡查频率,这样无意要增加很多开销。同时当你起身去拿一张餐巾纸的时间,回头发现你没吃完的饭就不见了,估计要骂街了吧。
■网友
1.如你所设想,针对这种情况HotSpot就是这样做的,这种优化叫做“逃逸分析”。逃逸分析根本就没有在堆上分配内存,而是直接在栈上展开。浅谈HotSpot逃逸分析。2.如果错误的手动delete了一个还被其他对象引用的对象,你知道后果多严重吗。反之,即使回收不及时又有什么重要的呢。
■网友
首先不管手动还是自动gc回收都得分析一下。那么gc在某个时间进行一次分析和不停的分析,你觉得哪种更好?
■网友
那你是不要时间要空间咯?难道你想两者兼得?


推荐阅读