静态内存分配和回收
静态内存分配是指在程序开始运行时由编译器分配的内存,在被编译时就已经能够确定需要的空间,当程序被加载时系统把内存一次性分配给它,这些内存不会在程序执行时发生变化,直到程序执行结束时才回收内存...包括原生数据类型及对象的引用
这些静态内存空间在栈上分配的,方法运行结束,对应的栈帧撤销,内存空间被回收....动态内存分配和回收
在程序执行时才知道要分配的存储空间大小,对象何时被回收也是不确定的,只有等到该对象不再使用才会被回收....堆和方法区的内存回收具有不确定性,因此垃圾收集器在回收堆和方法区内存的时候花了一点心思.
1 Java堆内存的回收
1.1 判定回收的对象
在对堆进行对象回收之前,首先要判断哪些是无效对象即一个对象不被任何对象或变量引用...yes,I am still alive :)
no,I am dead :(
3 方法区的内存回收
如果使用复制算法实现堆的内存回收,堆就会被分为新生代和老年代
新生代中的对象"朝生夕死",每次垃圾回收都会清除掉大量对象