对于任何语言,都会在运行期间建立许多对象,而且须要为这些对象分配内存地址。当这些对象不须要使用时,须要释放它们所占用的内存地址,以便新对象使用。对象内存释放的这个机制称为垃圾收集机制(GC)。
Java中的垃圾回收是自动化的,但其可控性较差,垃圾分类内存溢出很容易。内存溢出是由JVM内存分配的对象太多形成的,这些对象须要比JVM内存大小更多的内存。虽然它在Java中是自动的。可是程序员仍然能够调用系统。GC()用于手动恢复。调用此方法将尝试释放被丢弃对象占用的内存,但结果不必定,所以附加了免责声明。接下来,咱们将分析如何肯定要回收的对象、什么时候回收以及如何回收。程序员
肯定回收目标:算法
恢复对象的肯定有两种算法:引文计数法和可访问性分析法。[引用计数]系统向对象添加计数器,有新引用时添加1,引用失败时减去1。但这种方法不能解决两个物体的圆参考问题。[可访问性分析]为了肯定一个对象是否须要被引用链回收,将一系列GC根对象用做从这些根节点向下搜索的起点。搜索路径称为参考链。当一个对象和GC根之间没有连接时,它证实该对象不可用,须要进行搜索。回收此对象。对象
回收时间:内存
当CPU空闲、堆已满并调用系统时,它将回收。GC()回收。get
回收方法:自动化
[标签清除算法]首先标记须要回收的对象,而后再回收。缺点:恢复速度慢,回收后内存碎片大量离散,大对象须要在之后运行过程当中分配,找不到足够的连续内存,形成内存空间浪费。垃圾回收
[复制算法]搜索