对象引用 | 学习笔记

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

开发者学堂课程【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() 又占着其它的强引用的对象不放,那么我们就会出现一个逻辑上的死锁,所以这个时候就可以用引用来解决。

 

相关文章
|
9天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。
|
人工智能 前端开发 API
前端接入通义千问(Qwen)API:5 分钟实现你的 AI 问答助手
本文介绍如何在5分钟内通过前端接入通义千问(Qwen)API,快速打造一个AI问答助手。涵盖API配置、界面设计、流式响应、历史管理、错误重试等核心功能,并提供安全与性能优化建议,助你轻松集成智能对话能力到前端应用中。
711 154
|
15天前
|
人工智能 数据可视化 Java
Spring AI Alibaba、Dify、LangGraph 与 LangChain 综合对比分析报告
本报告对比Spring AI Alibaba、Dify、LangGraph与LangChain四大AI开发框架,涵盖架构、性能、生态及适用场景。数据截至2025年10月,基于公开资料分析,实际发展可能随技术演进调整。
963 152
|
负载均衡 Java 微服务
OpenFeign:让微服务调用像本地方法一样简单
OpenFeign是Spring Cloud中声明式微服务调用组件,通过接口注解简化远程调用,支持负载均衡、服务发现、熔断降级、自定义拦截器与编解码,提升微服务间通信开发效率与系统稳定性。
366 156
|
7天前
|
分布式计算 监控 API
DMS Airflow:企业级数据工作流编排平台的专业实践
DMS Airflow 是基于 Apache Airflow 构建的企业级数据工作流编排平台,通过深度集成阿里云 DMS(Data Management Service)系统的各项能力,为数据团队提供了强大的工作流调度、监控和管理能力。本文将从 Airflow 的高级编排能力、DMS 集成的特殊能力,以及 DMS Airflow 的使用示例三个方面,全面介绍 DMS Airflow 的技术架构与实践应用。
|
8天前
|
人工智能 自然语言处理 前端开发
Qoder全栈开发实战指南:开启AI驱动的下一代编程范式
Qoder是阿里巴巴于2025年发布的AI编程平台,首创“智能代理式编程”,支持自然语言驱动的全栈开发。通过仓库级理解、多智能体协同与云端沙箱执行,实现从需求到上线的端到端自动化,大幅提升研发效率,重塑程序员角色,引领AI原生开发新范式。
524 2