而Java堆和方法区则不一样:
一个接口中多个实现类需要的内存可能不一样
一个方法中的多个分支需要的内存也可能不一样
我们只有在程序运行期间才知道会创建哪些对象,这部分内存分配和回收都是动态的,垃圾收集器所关注的就是这部分内存...可作为GC Roots的对象包括:
虚拟机栈(栈帧中本地变量表)中引用的对象
方法区中类静态属性引用的对象
方法区中常量引用的对象
本地方法栈中JNI(Native方法)引用的对象
再谈引用
JDK1.2...被弱引用关联的对象只能生存到下一次垃圾收集发生之前.收集器一旦工作,就会回收掉只被弱引用关联的对象.无关内存情况....代码能看到,finalize()方法有被触发过.至于第二次自救失败,是因为任何对象的finalize()方法只被系统自动调用一次.对象面临下一次回收,此方法不会被再次执行.
finalize()方法不建议使用...复制 Copying
将内存按容量分为相等的两块A和B.每次只使用一块,比如A,这一块内存用完了,就对A进行回收,把存活的对象复制到B上,然后把A一次清理掉.