1、什么事垃圾
- 垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。
- 如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。
2、为什么需要GC
- 防止内存被消耗完
- 以便JVM将整理出的内存分配给新的对象。
- 随着应用程序所应付的业务越来越庞大、复杂,用户越来越多,没有GC就不能保证应用程序的正常进行。而经常造成STW的GC又跟不上实际的需求,所以才会不断地尝试对GC进行优化。
3、早期垃圾回收
手动回收:灵活,但是操作频繁,忘记回收会造成内存泄漏,最终导致OOM
4、java垃圾回收机制
- 自动内存管理,无需开发人员手动参与内存的分配与回收,这样降低内存泄漏和内存溢出的风险
- 自动内存管理机制,将程序员从繁重的内存管理中释放出来,可以更专心地专注于业务开发
- GC 主要回收的是堆区和方法区
从次数上讲:
频繁收集Young区
较少收集old区
基本不动Perm区(元空间)