Java中的垃圾回收

GC 的职责
1.分配内存
2.确保有引用的对象保留在内存中
3. 回收 不能通过引用关系找到 的对象的内存.

JVM使用分代式的内存管理方式, 将Heap分成三代 --- 新生代, 老一代, 持久代.
新生代分为Eden space, Survivor 0 和 Survivor 1 三个部分.
新生代对应小GC
老一代对应大GC
小GC执行频繁,大GC执行时间间隔一般是小GC十倍以上
大小GC都会中断程序运行

新创建的对象会被分配到新生代的Eden区域, 若新生成的对象的空间大于 XX:PretenureSizeThreshold时 ,则会直接被放入老年区
当Eden区域满时,小GC被触发
此时引用可达的对象将被移到surivior-0区域,年龄+1,引用不可达的对象将被直接删除
当Eden区域再次分配完后,小GC触发,引用可达的对象被移到surivior 1区域,年龄+1,同时surivior 0区域也执行小GC,释放引用不可达对象,然后将引用可达对象移到s1区域,年龄+1。此时,所有引用可达的对象都在s1区域,且s1区域的对象年龄不同。
当Eden再次满时,s0和s1角色互换,然后循环。即每次都会有一个区域被清空


新生代 复制算法:将现有的内存空间分为两快(s0、s1),每次只使用其中一块,在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收。
老年代 标记-压缩算法 (Mark-Compact):先需要从根节点开始对所有可达对象做一次标记,但之后,它并不简单地清理未标记的对象,而是将所有的存活对象压缩到内存的一端。之后,清理边界外所有的空间。这种方法既避免了碎片的产生,又不需要两块相同的内存空间,因此,其性价比比较高。
新生代对象会很快被回收,使用复制算法,空间换时间。
老年代对象存活更久,使用标记压缩算法,时间换空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值