什么是垃圾回收
垃圾回收,回收的是内存。
系统的内存总量是一定的,程序在使用内存的时候必须先申请,再使用,用完之后进行释放。申请内存的时机比较明确需要的时候就进行申请,但是内存释放的时机却不太确定,我们不知道这个内存是否还要继续使用。如果忘记释放内存,就会出现"内存泄漏“的问题。一旦出现”内存泄漏“就会非常难以调试,那么有那些发放可以进行反制。
在Java中可以通过"垃圾回收"机制进行反制。
对于垃圾回收机制来说,无论是谁申请的都由统一的人来负责释放(JVM中统一进行释放,就是由JVM内部的一组专门负责垃圾回收的线程来进行这样的工作)
垃圾回收机制
优点:能够非常好的保证不出现内存泄漏的情况。
缺点:
- 需要消耗额外的系统资源。
- 内存的释放可能存在延迟。
- 可能会导致出现STW问题
Java的垃圾回收回收的内存是那些
JVM中的内存主要有堆区,方法区,栈区,程序计数器。
堆区和方法区是垃圾回收机制要释放的内存,尤其是堆区。
栈区和程序计数器内存都是和具体的线程绑定在一起的,代码块结束/线程结束,内存就会自动释放。
像我们日常讨论的垃圾回收主要是对堆上完全不使用的内存进行回收。
垃圾回收是如何进行回收
找出垃圾
引用计数
Test a=new Test(),此时认为new Test()这个对象就有一个引用指向