概念
垃圾回收机制是java内部中设置的自动回收不用的内存的一种机制,它不用程序员自己去释放这些资源,减少资源的浪费,而像C/C++这种传统资源一般都是自己去回收这些资源的。
操作对象
java程序的内存的分配与回收都是有JRE在后台自动进行的,java会去回收那些不用的资源,这个叫做GC,通常JRE会设置一个后台线程专门去处理。
回收时间
一般都是内存资源不足的时候或者cpu空闲的时候
哪些东西会被回收
1.一般是程序中长时间没有被引用对象引用的对象,一般这些对象都是存在堆内存中,堆内存其实就是一个运行时数据区,这里面存放就是应用程序中建立的所有对象,所有的JVM都会有一个垃圾回收器去回收这些堆内存。
2.程序中的碎片内存,所谓的碎片内存理解起来就是说 一个对象与另一个 对象所占的内存之间的一部分内存空间,当这两个内存空间被释放后,就会 产生内存碎片,这些碎片空间会被放在堆大的一侧。
自动回收机制优点
- 垃圾回收机制可以很好的提高编程效率,在没有垃圾回收机制,程序可能要花费很多时间处理存储器的问题。
- 垃圾回收机制也是保证程序完整性的安全性策略
垃圾回收机制特点
- 垃圾回收机制的目标就是发现目标,释放目标,释放的也是JVM中的内存空间,所以对 硬件没有任何影响。
- 垃圾回收机制因为JVM需要一直监控程序中那些资源是不可用的资源,去发现这些资源,然后释放资源,可能会造成一些资源的浪费。
- 垃圾回收机制中,我们如果有 不用的对象我们可以将其设置为null,目的是为了告诉垃圾回收机制这个对象是属于无用的对象。
精确性
1.垃圾回收机制能够哦 精确标记活着的对象
这是能够完全回收所有废弃对象的前提,否则就可能造成内存泄漏。
2.垃圾回收器能够精确地定位对象之间的引用关系
这个是实现归并和复制算法的必要条件,通过这种引用关系,可以保证所有对象都能被可靠的回收,所有对象都重新分配,从而有效减少内存碎片的产生。
编写代码原则
对于不需要的对象,我们不要引用他们,2011年7月发布的java7提供了G1垃圾回收器来代替原来的并行标记/清除垃圾回收器(简称CMS)。
2014年3月发布的java8删除了HotSpot JVM中的永生代内存(它主要是用来存储那些常驻的内存或者通常不会被回收的信息)而改为使用本地内存来存储类的元数据信息,并成为元空间
ZGC:可扩展的低延时的垃圾回收器,它是有三部分构成的:Mark(标记)、Relocate(迁移)、Remap(重映射)三个阶段。
**GC算法:**标记清除,引数计数,复制,标记压缩,分代回收,增量式回收。