静态内存分配和回收
静态内存分配是指在程序开始运行时由编译器分配的内存,在被编译时就已经能够确定需要的空间,当程序被加载时系统把内存一次性分配给它,这些内存不会在程序执行时发生变化,直到程序执行结束时才回收内存...每个栈帧中的本地变量表都是在类被加载的时候就确定的,每一个栈帧中分配多少内存基本上是在类结构确定时就已知了,因此这几块区域内存分配和回收都具备确定性,就不需要过多考虑回收问题了....堆和方法区的内存回收具有不确定性,因此垃圾收集器在回收堆和方法区内存的时候花了一点心思.
1 Java堆内存的回收
1.1 判定回收的对象
在对堆进行对象回收之前,首先要判断哪些是无效对象即一个对象不被任何对象或变量引用...GC Roots并不包括堆中对象所引用的对象!...yes,I am still alive :)
no,I am dead :(
3 方法区的内存回收
如果使用复制算法实现堆的内存回收,堆就会被分为新生代和老年代
新生代中的对象"朝生夕死",每次垃圾回收都会清除掉大量对象