JVM篇-垃圾回收概述
分类:
文章
•
2022-10-12 23:51:34
什么是垃圾
- 垃圾收集,不是Java语言的半生产物,早在1960年第一门开始使用动态分配和垃圾收集急速的Lisp语言诞生
- 关于垃圾收集有三个经典问题:
- 垃圾收集机制是Java的招牌能力,它极大的提高了开发效率
什么是垃圾(Garbage)呢?
- 垃圾是指运行程序中没有任何指针指向的对象,这个对象就是需要回收的垃圾
- 如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占用的内存空间会一直保留到应用程序结束,有可能影响其他对象的使用或者导致内存溢出
为什么需要GC?
- 对于高级语言来说,不进行垃圾回收,内存迟早都会被消耗完。
- 释放没用的独享,垃圾回收也可以清除内存里的记录碎片,碎片整理将所有占用的堆内存到堆的一段,以便于JVM将整理出的内存分配给的新的对象
- 随着应付业务越来越庞大、复杂、用户越来越多,没有GC就不能保证应用程序的正常进行,经常造成STW的GC又跟不上实际的需求,所以才会不短地尝试对GC进行优化。
早期垃圾回收
- 早起C/C++时代,内存回收基本上市手工进行的,开发人员可以使用new关键字申请内存,使用delete关键字进行内存释放。
- 这种方式可以灵活控制内存的释放时间,但是会给开发人员带来频繁申请释/放内存的管理负担,如果管理不恰当,统一内存泄露,导致程序崩溃
- 目前来说除了Java,还有C#、Python、Ruby等语言使用自动垃圾回收思想,是未来发展的趋势。
Java垃圾回收机制
- 自动内存管理,降低内存泄露和内存溢出的风险
- 自动内存管理,减轻了Java程序员的内存管理负担,可以更专注于业务的开发。
对Java程序员带来的风险
- 对于Java开发人员而言,自动内存管理如果过度依赖自动,会弱化Java开发人员在程序出现内存溢出时定位问题和解决问题的能力。
- 因此了解JVM自动内存分配和垃圾税收原理就显得重要,只有真正了解JVM是如何管理内存,在遇到类似OOM的异常就能快速定位并解决问题。
- 排查内存溢出、内存泄露问题时,当垃圾收集成为系统大刀更高并发量的瓶颈时,我们就必须对这些自动化的技术实施必要的监控和调节
对于GC应该关心那些区域?