JVM学习笔记20190119-各种引用关系

本文深入探讨了Java中不同类型的引用关系,包括强引用、软引用、弱引用和虚引用,以及它们在内存管理中的作用。同时,详细解析了GC触发条件与回收算法,如标记-清除、复制算法和标记-整理算法,并介绍了分代收集策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

各种引用关系概念:

强引用

Object obj = new Object();

 

软引用 softReference

一些有用但是并非必须,用软引用关联的对象,系统将要发生OOM之前,这些对象就会被回收

如果说这些对象被回收之后,还是超出内存,就会抛出OOM异常

 

弱引用 WeakReference

一些有用但是并非必须,用弱引用关联的对象,这些对象有用的程度比软引用更低

这些对象只能生存到下次垃圾回收之前,GC发生的时候,不管内存是否足够,都会被回收

 

虚引用 PhantomReference

最弱的引用关系,被垃圾回收的时候收到一个通知

 

GC什么时候进行回收?

1. 执行 system.gc()的时候

 

2.老年代空间不足,一次Full GC 之后,然后不足 会触发 java.outofmemoryError:java heap space

 

3.永久代空间不足 永生代或者永久代, java.outofMemory PerGen Space

 

4. minor之后 survior放不下,放入老年代,老年代也放不下,触发FullGC, 或者新生代有对象放入老年代,老年代放不下,触发FullGC

 

5.新生代晋升为老年代时候,老年代剩余空间低于新生代晋升为老年代的速率,会触发老年代回收

 

6. new 一个大对象,新生代放不下,直接到老年代,空间不够,触发FullGC

 

 

GC怎么进行回收?

 

GC算法

标记-清除算法(Mark-Sweep)

复制算法(Copying)

标记-整理算法(Mark-Compact)

实际使用时,把算法们都用上,分代使用

 

90%以上的对象是朝生夕死的

 

新生代:采用复制算法

1个Eden

2个Survivor

Eden:Survivor:Survivor = 8:1:1

老年代:存活超过一定时间的,超过一定GC次数的

 

新生代的垃圾回收叫 minor gc

老年代的垃圾回收叫 full gc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值