GC发生在堆中
- 次数上频繁收集young区 minorGC
- 次数上较少收集old区 fullGC
- 基本不动perm区永久区
算法: - 引用计数法(淘汰)
- 复制算法:minorGC,额外空间
- 标记清楚:fullGC,标记一次,清除没有标记的,内存碎片
- 标记压缩:fullGC,标记一次,压缩一次,需要移动对象的成本
jvm什么时候触发gc,如何减少fullgc次数:
1.主动调用System.gc()方法的调用
2.老年代代空间不足,新生代创建大对象,大数组
3.永生区空间不足,可采用的方法为增大Perm Gen空间
4.CMS GC时出现promotion failed和concurrent mode failure,增大survivor space
5.堆中分配很大的对象,改一个参数
1.常见的内存泄露
(1)内存分配未成功,却使用了它
(2)内存分配成功,但尚未初始化就引用它
(3)内存分配成功且初始化,但操作越过了内存的边界
(4)忘记释放内存,造成内存泄漏
(5)释放了内存却继续使用它