一、什么是垃圾
关于垃圾收集经典问题:
- 哪些垃圾需要回收
- 什么时候回收
- 如何回收
垃圾收集什么:运行程序中,没有任何指针指向的对象,这个对象就是需要回收的垃圾。
在jdk中垃圾回收器一直在优化。
二、为什么需要GC
- 不进行垃圾回收,内存迟早会消耗完,发生溢出
- 需要JVM整理内存碎片,清理出整片的内存,分配给新对象
- 没有GC,就无法保证应用程序正常运行
三、早期垃圾回收
早期的C和C++ 都是手动回收、申请内存的,相对比较灵活。但是增加了代码的复杂度。如果忘记回收可能出现内存泄漏,所谓内存泄漏就是对象已经不用了,但是还有指针指向它,导致它无法回收。
现在比较流行的就是自动垃圾回收的思想,也是趋势。
四、Java垃圾回收机制
- 自动内存管理(分配、回收),降低了内存泄漏和移除的风险
- 让开发人员更加关心业务开发
- 弱化了开发人员内存问题的解决能力,所以开发人员需要根据相关信息定位内存问题,同时也要实施必要的监控和调节
- GC作用域是方法区和堆,堆空间是GC重点区,频繁Young、很少Old、基本不懂MeatSpace