一、垃圾回收机制:不定时查看堆内存,判定哪些对象是正在使用的对象和未使用的对象及删除未使用对象的过程
二、垃圾回收算法
1.引用计数法:给对象添加个引用计算器,每当有个地方引用他,值+1;失效-1;任何时刻值为0的对像,判断不可达,等待gc清理
存在2个问题(被报废):a:两个对象相互引用,gc永远清理不了
b:引用计数法无法解决多种类型引用的问题
2.复制算法:内存空间大小相当的二部分,A、B,每次使用一部分A,这部分用完之后,把活着的对象复制到另一部分内存B,然后把A区全部清理掉。作用:1.没有内存碎片 2.简单、高效 缺点: 一半的内存空闲浪费(空间换取时间)
3.标记清除算法:
缺点:有内存碎片,不高效,原因是:这样的插空,首先判断list集合,哪些地方是空的,然后判断空的地方的内存大小,然后才能知道哪个对象,放到哪个内存中,插完空,再去掉在List中的这部分。所以GC时间变长,进程挂起,程序就会卡顿
4.标记压缩算法:是对上一个算法的优化,就可以不用List,只需记录空闲内存的起始位置,分配新内存,直接放就好了
5.分代算法:
三、四种引用
b.1 java对象的引用包括:强引用,软引用,弱引用,虚引用
b.2 这四种引用:1.可以让程序员通过代码决定对象的生命周期 2.有利于JVM进行垃圾回收
b.3 强引用:创建一个对象,并把对象赋给一个引用变量
b.4 软引用:如果一个对象具有软引用,内存空间足够,垃圾回收期就不会回收
作用:可以被实现内存敏感的高速缓存,比如网页缓存、图片缓存(可有可无,有的话,会访问更快,没有的话,也不影响程序)。可以防止内存泄漏,增强程序健壮性
b.5 弱引用
b.6 虚引用