垃圾收集器与内存分配策略
最早人们思考GC需要完成的3件事情:
哪些内存需要回收
什么时候回收
如何回收
经过发展,内存动态分配和回收技术已经成熟,为什么还要了解GC和内存分配呢?...当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,虚拟机将认为没有必要触发该方法....(finalize()方法最多只被自动调用一次)
如果这个对象被判定为有必要执行finalize()方法,对象就被放入F-Queue队列,等待Finalizer线程执行.
finalize()方法中GC...代码能看到,finalize()方法有被触发过.至于第二次自救失败,是因为任何对象的finalize()方法只被系统自动调用一次.对象面临下一次回收,此方法不会被再次执行.
finalize()方法不建议使用...线程离开安全区,先检查系统是否完成根节点枚举或整个GC,如果完成,线程就继续执行,否则等待直到收到可以离开的信号.
垃圾收集器
垃圾收集器的实现没有统一的规定,所以有很多种不同实现.