1.概述
学习GC需要搞懂以下三个问题:
1.1 哪些内存需要回收
1.2 什么时候回收
1.3 如何回收
问题1
哪些内存需要回收,这个问题指向的就是堆空间当中存放着的对象实例,这一部分是可以动态变化的...,开始对引用进行了区分,分成了以下四种形式
强引用 : 使用new Object()创建出来的对象,只要在代码中还在运行,那么它就不会被GC所回收
软引用 : 类似于对象当中的关联对象,当内存即将溢出之前...,软引用会被GC回收
弱引用 : 用来描述非必须的对象,不管当前内存是否不足,都会被GC列为需要回收的对象
虚引用 : 唯一目的就是能在这个对象被收集器回收时收到一个系统通知
回收方法区
对于回收方法区它的性能肯定是不如回收堆空间来的简单...CPU自身
2.分代收集:G1可以选择自己独立管理堆内存,也可以选择跟其他的GC回收器一起进行管理
3.空间整合:更有利于程序的长时间运行,分配大对象时不会因为无法找到连续的内存空间而提前触发了GC
4...GC不远了,如果Full GC依旧不能解决问题,那么就会导致内存的溢出
3.从JDK1.8的版本开始,已经取消了永久代,取而代之的是Meta Space,这个空间是可以自动拓展的,好处是提高了该部分存储空间的灵活性