什么是垃圾(Garbage)呢?
- 垃圾是指程序运行过程中,没有任何指针指向的对象。
- 英语:An object is considered garbage when it can no longer be reached from any pointer in the running program.
如果不及时对内存中的垃圾进行清理,那么这些对象会占有空间直至程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。
什么是GC,为什么需要GC?
- 对于高级语言来说,一个基本的认知是,如果不进行垃圾回收,内存早晚要被消耗完。因为程序不断的分配内存空间,如果回收某些对象,那么迟早会内存溢出。
- 除了释放没用的对象,垃圾回收也可以整理内存中的记录碎片。碎片整理将占用的堆内存移到堆的一端,以便JVM将整理出的内存空间分配给新的对象。
- 随着应用程序所应付的业务越来越庞大、复杂,用户越来越多,没有GC就不能保证应用程序的正常进行。而经常早成STW的GC又跟不上实际的需求,所以会不断地尝试对GC进行优化。