对象引用 | 学习笔记

简介: 快速学习对象引用。

开发者学堂课程【Java 面试疑难点串讲1:面试技巧及语言基础:对象引用】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/24/detail/501


对象引用

 

内容介绍

一、内存分配

二、垃圾回收


一、内存分配

JDK 1.2 开始实际上就提出有四种引用关系:强引用、软引用、弱引用、虚引用。

很多的时候你可能并不需要你再去编写这样的代码,但是对于这些概念你必须清楚。

1、强引用:对象将一直被进行引用,即使出现了“OutOfMemeryError”错误信息。

package cn.mldn.demo;
public class TestRefDemo (
public static void main(String[] args) {
Object obj = new Object(); //
实例化对象Object ref = obj;//强引用,默认的状态就属于强引用状态obj = null; //原始的对象断开引用,但是ref依然引用着System.gc();//垃圾收集

System.out.println(ref);

二、垃圾回收

1、软引用:

对象将被尽可能长时间的保存,一直到出现内存不足的情况下才会被回收,所以这样的操作很多时候将其用于缓存的开发上,

例如,在 MyBatis.里面就提供有对于软引用模式的缓存模式。

package cn.mldn.demo;
import java.lang.ref.SoftReference;
public class TestRefDemo {
public static void main(String[] args) {
Object obj = new Object(); //
实例化对象//发生了一个软引用SoftReference<object> ref = new SoftReference<object>(obj);

obj = null ; // 断开连接System.gc();//进行垃圾收集System.out.println(ref.get());

注:如果说这个时候出现了内存不足的问题,那么才会进行回收,也就是说对象会尽可能的保存时间长一些。

 

2.  弱引用:

一旦有了垃圾收集操作之后就会进行回收

package cn.mldn.demo;
import java.util.Map;
import java.util.WeakHashMap;
public class TestRefDemo {
public static void main(String[] args) {
String str = newString("
极限IT") ;
0bject obj= new 0bject();//
实例化对象Map<String,0bject> map= new WeakHashMap<String ,0bject>() ;

map.put(str, obj) ; //追加了弱引用System.out.println("GC执行之前"+map.get(str));

str =
System.gc();
System.out.println("GC
执行之后" + map.get(str));

3.虚引用(幽灵引用),这种操作返回的内容永远都是 null ,就是不引用;

package cn.mldn.demo;
import java.lang.ref.PhantomReference;

import java.lang.ref.ReferenceQueue;
public class TestRefDemo {
public static void main(String[] args) {
Object obj = new0bject();
ReferenceQueue<0bject> queue = new ReferenceQueue<0bject>();

PhantomReference<0bject> pr = new PhantomReference<0bject>(object)

System.gc();
System.out.println(pr·get());

注:在对象垃圾收集前一定会调用 finalize() 方法,但是如果说 finalize() 又占着其它的强引用的对象不放,那么我们就会出现一个逻辑上的死锁,所以这个时候就可以用引用来解决。

 

相关文章
|
4天前
|
人工智能 运维 安全
|
2天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
9天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
799 109
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
375 9
|
2天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
3天前
|
机器学习/深度学习 传感器 算法
Edge Impulse:面向微型机器学习的MLOps平台——论文解读
Edge Impulse 是一个面向微型机器学习(TinyML)的云端MLOps平台,致力于解决嵌入式与边缘设备上机器学习开发的碎片化与异构性难题。它提供端到端工具链,涵盖数据采集、信号处理、模型训练、优化压缩及部署全流程,支持资源受限设备的高效AI实现。平台集成AutoML、量化压缩与跨硬件编译技术,显著提升开发效率与模型性能,广泛应用于物联网、可穿戴设备与边缘智能场景。
184 127