垃圾回收机制
概述:
java中一个显著的特点就是垃圾回收机制,会将无用的对象自动回收,不会像c++程序员那样自己手动
管理内存,它使得java程序员再开发过程中不想需要担心内存问题,它可以有效的防止内存泄漏
他有许多垃圾回收的算法,但是其目的都是:发现无效对象,将无效对象回收,释放内存
标记清除法:
它是从根集合进行扫描,对存活的对象进行标记,标记完成后再扫描未被标记的对象,进行回收,回收的速度慢,容易出现大量的内存碎片
标记整理算法:
对需要回收的对象进行整理,包括有效的对象,不会产生内存碎片
复制算法:
将内存分为两个部分,每次只使用一个,当使用满了之后将有效的对象复制到另一个部分中,回收原来的
空间
分代收集算法:
主要是对以上三种方法就行自动选择
分为新生代,老年代,永久带
- 新生代:存放最新产生的对象,新生代分为eden区、survivor0和survivor1三个区,按照8:1:1的比例,大部分对象都是放在第一个分区,当第一个满了之后将存活的对象放到第二个,清空第一个,第二个满了之后放入到第三个,清空第二个,若三个分区都满了则将对象放入到老年代,新生代触发的是MinorGc,
老年代满了之后就会触发Full GC - 老年代:一般是新生代的两倍,一般存放的对象声明周期会很长
- 永久代:存放静态文件,它对垃圾回收没有影响
新生代使用的是复制算法,老年代使用的是标记清除和标记整理算法,jdk8之后废弃了永久代,使用了元空间就行存放,它直接存放在内存可自定义大小