一、为什么要有垃圾回收
我们每次创建对象都需要在栈上开辟空间,堆上使用内存,如果我们只是开辟了这个空间,而不去释放他,那么再大的内存和空间也会有满的一天,所以我们在Java中引入了GC(垃圾回收机制)
二、GC如何确认是否是垃圾
可达性分析:以代码中的一些变量为起点,看哪些对象能被访问到,标记为可达,剩下的不可达的也就是垃圾了。
这里称为起点的变量(GCRoot),可以为栈内的局部变量,常量池中的对象,方法区中的静态引用类型的成员。
大家可以将他想成一个二叉树
不可达,就是把他们中间相互连接的这个线给抹除,无法访问
然后GC就认为2是垃圾,就会去回收他
三:GC回收的方法
Java中采用分代回收的方法
新开辟的进程会被放在伊甸区,GC会频繁对其进行扫描
每次扫描,该进程的年龄就会增加一岁
如果到了一定的年龄,该进程任然在运行,不是垃圾,那么就会被放到扫描频率低一点的幸存区
如果在幸存区进行反复扫描依然存活
最后就会被丢到扫描频率最低的老年区文章来源:https://www.toymoban.com/news/detail-563235.html
PS:一个很大的程序会被直接丢到老年区文章来源地址https://www.toymoban.com/news/detail-563235.html
到了这里,关于关于java垃圾回收的小结的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!