JVM规范并没有要求垃圾回收机制的具体技术
只是要求JVM开发者要对内存进行合适的处理
gc-----garbage collector
一个gc有2个工作:
垃圾回收
处理内存碎片(fragmentation)
gc虽然会导致性能上的劣势 但是在安全性上有优势 避免了编程人员任意释放内存 导致程序崩溃
gc algorithm:
垃圾回收算法:
1、找出garbage
reference count(out-of-favor),对于环不好处理
tracing(based on Tracing Graphic):"mark and sweep"
2、reclaim内存
fragmentation algorithm
compacting
将内存滑向heap的一端
coping:"stop and copy" heap分成2部分,一部分使用,一部分不使用,当使用的一部分耗尽时,把live的objects全部复制到另一部分,原有部分就可以垃圾回收了
--------------->优化为:generation collector(区分内存为young 和 old,越年轻越容易被gc)
将heap等分,在几个sub-heap间copy 浪费内存
adaptive collector会根据heap的情况 分情况使用各种gc技术
finalizer 只可能调用一次,仅仅一次。
由于finalize方法可能会使得一些garbage重新被reference 所以必须按以下顺序:
gc-->finalize-->gc
上顺序可以优化 在有finalize的object上进行trace 没有被trace到的可以直接被gc