前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试专题:Java中的对象引用类型有哪几种?

面试专题:Java中的对象引用类型有哪几种?

原创
作者头像
小明爱吃火锅
发布2023-12-23 16:59:39
1430
发布2023-12-23 16:59:39
举报
文章被收录于专栏:小明说Java小明说Java

前言

在Java编程中,对象是通过引用来访问的,这些引用类型决定了对象的生命周期和内存管理方式。Java中有四种引用类型,分别是强引用、软引用、弱引用和虚引用,Java面试中,有关如果问到垃圾回收相关点,大概率也会问题Java对象引用类型有哪几种?下面我们来详细了解一下这四种引用类型。

强引用(正常引用)

当我们使用 new 这个关键字创建对象时创建出来的对象就是强引用(new出来对象为强引用) ?如

代码语言:actionscript
复制
Object obj = new Object() ?

这个obj就是一个强引用了。

如果一个对象具有强引用。垃圾回收器就不会回收有强引用的对象。

如当jvm内存不足时,具备强引用的对象,虚拟机宁可会抛出OutOfMemoryError(内存空间不足),使程序终止,也不会靠垃圾回收器去回收该对象来解决内存。引用消失就会被垃圾回收

软引用:SoftReference

如果一个对象只具有软引用,那就类似于可有可物的生活用品。如果内存空间足够,垃圾回收器就不会回收它,如果内存空间不足了,就会回收这些对象的内存。

只要垃圾回收器没有回收它,该对象就可以被程序使用。定义一个软引用:

代码语言:java
复制
SoftReference<Object> obj = new SoftReference<>(new Object());

弱引用: WeakReference

弱引用是一种比软引用更弱的引用类型。当一个对象只被弱引用指向时,它可以被垃圾回收器回收,并且不会被放入任何队列中。当内存不足时,垃圾回收器会尝试回收弱引用指向的对象。定义一个弱引用:

代码语言:java
复制
WeakReference<Object> obj = new WeakReference<>(new Object());

虚引用:PhantomReference

虚引用是一种最弱的引用类型。当一个对象只被虚引用指向时,它可以被垃圾回收器回收,并且不会被放入任何队列中。与软引用和弱引用不同的是,虚引用的主要作用是在对象被回收之前执行一些清理操作。定义一个虚引用:

代码语言:java
复制
PhantomReference<Object> obj = new PhantomReference<>(new Object(), new PhantomReferenceQueue());

GC回收情况

强软弱虚引用,这四种类型的引用使用强度依次递减的。?

强:最强的引用类型,当前仅当该类型主动释放对象空间,即赋值为null的时候,才会进行垃圾回收。只要该引用保留对象,则如果GC怎么申请都是不会回收的。

软:次于强,当GC回收时,如果内存空间已满,不够用了,则会对该类型进行回收。? 适合做缓存

弱:只要GC回收,则立马被回收。 解决map存在内存泄漏的问题

虚:相当于没有引用

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 强引用(正常引用)
  • 软引用:SoftReference
  • 弱引用: WeakReference
  • 虚引用:PhantomReference
  • GC回收情况
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com