深入Java虚拟机
内存分配
1、对象优先在Eden区分配
2、大对象直接进入老年代
3、长期存活的对象将进入老年代
虚拟机给每个对象定义了一个年龄计数器。年龄计数器的工作原理?对象如果在Eden区出生并且经过第一次Minor GC之后仍然存活,并且能被Survivor容纳的话,将被移动到Survivor空间中,并将对象年龄设为1.对象在Survivor区中每熬过一次Minor GC 的话,年龄就会加1,当他的年龄增加到一定程度(默认15岁,这个只可以通过虚拟机的参数调节-XX:MaxTenuringThreshold 来设置)的时候,就会被晋升到老年代中。
垃圾回收
1、垃圾收集算法
检查-清理算法
检查-整理算法
复制算法
分代算法
2、垃圾收集器
由于当前的虚拟机大都使用分代算法,所以垃圾收集器也是对该算法的实现。
新生代——Serial收集器、ParNew收集器、Parralle Scavenge收集器
老年代——Serial Old收集器、Parallel Old收集器、CMS(Concurrent Mark Sweep)收集器
内存管理
java技术体系的内存自动管理最终可以归结为自动化的解决了两个问题:给对象分配内存和回收分配给对象的内存。