电子商务网站建设实训心得/外贸网站设计

电子商务网站建设实训心得,外贸网站设计,网站建设企业实践日志,怎么做免费的网站在 Java 中,引用(Reference)机制用于管理对象的生命周期和垃圾回收。Java 提供了四种类型的引用:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Refer…

在 Java 中,引用(Reference)机制用于管理对象的生命周期和垃圾回收。Java 提供了四种类型的引用:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。WeakHashMap 使用弱引用来存储键,从而在键不再被强引用引用时自动移除对应的条目。下面是 WeakHashMap 的使用方法以及四种引用的优缺点对比。

WeakHashMap 使用方法

基本概念
  • 弱引用(Weak Reference):弱引用不会阻止对象被垃圾回收。如果一个对象只被弱引用引用,并且没有其他强引用引用它,那么该对象在下一次垃圾回收时会被回收。
  • 自动移除:当 WeakHashMap 中的键被垃圾回收时,对应的键值对会自动从 WeakHashMap 中移除。
主要方法

WeakHashMap 实现了 Map 接口,因此它提供了 Map 接口中的所有方法,如 put, get, remove, containsKey, containsValue, size, isEmpty, clear 等。

示例代码

以下是一些常见的 WeakHashMap 使用示例:

1. 基本用法
import java.util.Map;
import java.util.WeakHashMap;public class WeakHashMapExample {public static void main(String[] args) {Map<Key, String> weakMap = new WeakHashMap<>();Key key1 = new Key("key1");Key key2 = new Key("key2");weakMap.put(key1, "Value1");weakMap.put(key2, "Value2");System.out.println("Initial WeakHashMap: " + weakMap);// 清除强引用key1 = null;key2 = null;// 强制进行垃圾回收System.gc();// 等待一段时间,确保垃圾回收完成try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("WeakHashMap after GC: " + weakMap);}static class Key {private String id;public Key(String id) {this.id = id;}@Overridepublic String toString() {return "Key{" + "id='" + id + "'}";}@Overridepublic int hashCode() {return id.hashCode();}@Overridepublic boolean equals(Object obj) {if (this == obj) return true;if (obj == null || getClass() != obj.getClass()) return false;Key key = (Key) obj;return id.equals(key.id);}}
}

输出

Initial WeakHashMap: {Key{id='key1'}=Value1, Key{id='key2'}=Value2}
WeakHashMap after GC: {}

解释

  • 创建了一个 WeakHashMap 并添加了两个键值对。
  • 清除了对键的强引用。
  • 强制进行垃圾回收,并等待一段时间。
  • 垃圾回收后,WeakHashMap 中的所有条目都被移除,因为键不再被强引用引用。
2. 使用弱引用的缓存
import java.util.Map;
import java.util.WeakHashMap;public class WeakHashMapCacheExample {public static void main(String[] args) {Map<Key, String> cache = new WeakHashMap<>();Key key1 = new Key("key1");Key key2 = new Key("key2");cache.put(key1, "Value1");cache.put(key2, "Value2");System.out.println("Initial Cache: " + cache);// 清除对 key1 的强引用key1 = null;// 强制进行垃圾回收System.gc();// 等待一段时间,确保垃圾回收完成try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Cache after GC: " + cache);// 重新获取 key2 的值System.out.println("Value for key2: " + cache.get(key2));}static class Key {private String id;public Key(String id) {this.id = id;}@Overridepublic String toString() {return "Key{" + "id='" + id + "'}";}@Overridepublic int hashCode() {return id.hashCode();}@Overridepublic boolean equals(Object obj) {if (this == obj) return true;if (obj == null || getClass() != obj.getClass()) return false;Key key = (Key) obj;return id.equals(key.id);}}
}

输出

Initial Cache: {Key{id='key1'}=Value1, Key{id='key2'}=Value2}
Cache after GC: {Key{id='key2'}=Value2}
Value for key2: Value2

解释

  • 创建了一个 WeakHashMap 作为缓存,并添加了两个键值对。
  • 清除了对 key1 的强引用。
  • 强制进行垃圾回收,并等待一段时间。
  • 垃圾回收后,key1 对应的条目被移除,而 key2 对应的条目仍然存在。
  • 重新获取 key2 的值,验证缓存中仍然存在该条目。

强引用、软引用、弱引用和虚引用的对比

强引用(Strong Reference)
  • 定义:强引用是最常见的引用类型,只要对象有强引用,垃圾回收器就不会回收该对象。
  • 使用场景:大多数对象使用强引用。
  • 优点
    • 对象不会被垃圾回收,确保对象的生命周期。
  • 缺点
    • 容易导致内存泄漏,因为对象不会被自动回收。
软引用(Soft Reference)
  • 定义:软引用不会阻止对象被垃圾回收,但只有在内存不足时才会被回收。
  • 使用场景:适用于实现内存敏感的缓存。
  • 优点
    • 在内存不足时可以回收对象,避免内存溢出。
  • 缺点
    • 对象的回收时间不可预测,可能导致缓存中的数据丢失。
    • 需要额外的管理来处理软引用。
弱引用(Weak Reference)
  • 定义:弱引用不会阻止对象被垃圾回收,只要对象没有其他强引用引用它,就会被回收。
  • 使用场景:适用于实现缓存,避免内存泄漏。
  • 优点
    • 对象的回收时间可预测,只要没有强引用引用对象,就会被回收。
    • 自动管理内存,避免内存泄漏。
  • 缺点
    • 对象的回收时间不可预测,可能导致缓存中的数据丢失。
    • 需要额外的管理来处理弱引用。
虚引用(Phantom Reference)
  • 定义:虚引用不会阻止对象被垃圾回收,主要用于跟踪对象的回收状态。
  • 使用场景:适用于需要跟踪对象回收状态的场景。
  • 优点
    • 可以跟踪对象的回收状态。
  • 缺点
    • 无法通过虚引用访问对象。
    • 需要配合引用队列(Reference Queue)使用。

对比表格

特性强引用 (Strong Reference)软引用 (Soft Reference)弱引用 (Weak Reference)虚引用 (Phantom Reference)
定义最常见的引用类型不阻止对象被垃圾回收,内存不足时回收不阻止对象被垃圾回收,没有强引用时回收不阻止对象被垃圾回收,主要用于跟踪对象回收状态
使用场景大多数对象内存敏感的缓存缓存,避免内存泄漏跟踪对象回收状态
优点对象不会被垃圾回收内存不足时回收对象,避免内存溢出对象的回收时间可预测,自动管理内存可以跟踪对象的回收状态
缺点容易导致内存泄漏对象的回收时间不可预测对象的回收时间不可预测无法通过虚引用访问对象
适用性通用内存敏感的应用缓存管理对象回收状态跟踪
实现类无特殊类java.lang.ref.SoftReferencejava.lang.ref.WeakReferencejava.lang.ref.PhantomReference
示例Object obj = new Object();SoftReference<Object> softRef = new SoftReference<>(new Object());WeakReference<Object> weakRef = new WeakReference<>(new Object());PhantomReference<Object> phantomRef = new PhantomReference<>(new Object(), new ReferenceQueue<>());

总结

  • 强引用:最常见,确保对象不被垃圾回收,但可能导致内存泄漏。
  • 软引用:适用于内存敏感的缓存,内存不足时回收对象。
  • 弱引用:适用于缓存管理,自动管理内存,避免内存泄漏。
  • 虚引用:用于跟踪对象的回收状态,无法访问对象。

通过理解这些引用类型及其优缺点,可以更好地管理对象的生命周期和内存使用,特别是在实现缓存和内存敏感的应用时。WeakHashMap 利用弱引用来实现自动内存管理,适用于需要缓存的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/72516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机指令系统入门

目录 基本概念讲解 一、机器指令​ 二、汇编指令​ &#xff08;一&#xff09;汇编指令的一般格式 &#xff08;二&#xff09;按字节数分类的指令 三、高级指令 总结​ 基本概念讲解 指令是计算机&#xff08;或单片机&#xff09;中 CPU 能够识别并执行的基本操作命令…

AtCoder Beginner Contest 397(ABCDE)

目录 A - Thermometer 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; B - Ticket Gate Log 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; C - Variety Split Easy 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; D - Cubes 翻译&#xff1a…

Spring Cloud Gateway 生产级实践:高可用 API 网关架构与流量治理解析

API 网关的核心价值 在分布式微服务架构中&#xff0c;API 网关作为系统流量的唯一入口&#xff0c;承担着路由分发、安全防护、流量治理三大核心职责。Spring Cloud Gateway 基于响应式编程模型与 Netty 高性能网络框架&#xff0c;提供灵活的路由规则、动态过滤器链和深度集…

在Pycharm配置conda虚拟环境的Python解释器

〇、前言 今天在配置python解释器时遇到了这样的问题 经过一下午自行摸索、上网搜寻后&#xff0c;终于找到的解决的方案&#xff0c;遂将该方法简要的记录下来&#xff0c;以备后用&#xff0c;并希望能帮助到有同样问题或需求的朋友:) 我所使用的软件的版本如下&#xff0c;假…

集成学习(上):Bagging集成方法

一、什么是集成学习&#xff1f; 在机器学习的世界里&#xff0c;没有哪个模型是完美无缺的。就像古希腊神话中的"盲人摸象"&#xff0c;单个模型往往只能捕捉到数据特征的某个侧面。但当我们把多个模型的智慧集合起来&#xff0c;就能像拼图一样还原出完整的真相&a…

Springboot+Vue登录、注册功能(含验证码)(后端!)

我们首先写一个接口&#xff0c;叫login&#xff01;然后对传入一个user&#xff0c;因为我们前端肯定是要传过来一个user&#xff0c;然后我们后端返回一个user&#xff0c;因为我们要根据这个去校验&#xff01;我们还引入了一个hutool的一个东西&#xff0c;在pom文件里面引…

冯 • 诺依曼体系结构

冯 • 诺依曼体系结构 一、冯 • 诺依曼体系结构推导阶段 1&#xff1a;初始计算机体系结构&#xff08;仅输入、运算、输出&#xff09;阶段 2&#xff1a;加入控制功能&#xff0c;初步形成 CPU 概念阶段 3&#xff1a;性能瓶颈与引入内存阶段 4&#xff1a;最终冯诺依曼体系…

2025人工智能“落地生花”:这六大领域正掀起颠覆性革命

——从医疗到养老&#xff0c;一场“AI”的全民狂欢正在上演 2025年的春天&#xff0c;全球科技界的热搜被一个中国AI大模型“霸榜”——DeepSeek。从春晚的机器人热舞到政务系统的“数字员工上岗”&#xff0c;从医疗诊断到工业炼钢&#xff0c;这场始于春节的技术海啸&#…

蓝耘智算|从静态到动态:探索Maas平台海螺AI图片生成视频功能的强大能力

文章目录 &#x1f44f;一、技术介绍&#x1f44f;二、平台注册&#x1f44f;三、功能体验&#x1f44f;四、总结 随着人工智能技术的快速发展&#xff0c;视频处理和生成技术已经成为了众多行业关注的热点。最近&#xff0c;我有机会体验了蓝耘智算平台的Maas平海螺AI视频产品…

解决从deepseek接口获取的流式响应输出到前端都是undefined的问题

你的前端 EventSource 代码遇到了 undefined 连续输出 的问题&#xff0c;通常是因为&#xff1a; AI 返回的内容被拆成了单个字符&#xff0c;导致前端 JSON.parse(event.data).content 获取到的是单个字符&#xff0c;而 undefined 可能是因为某些数据块没有 content 字段。…

前缀和 之 哈希表 之 和 的奇偶与倍数

文章目录 930.和相同的二元子数组523.连续的子数组和 求解连续子数组的和的问题&#xff0c;常常会使用到这个前缀和的思路&#xff0c;当然当数组存在单调性的时候&#xff0c;可以考虑使用不定长滑动窗口&#xff0c;在这里解释一下&#xff0c;何为数组的和存在这个单调性&a…

Docker Compose 和 Kubernetes(K8s)对比

Docker Compose 和 Kubernetes&#xff08;K8s&#xff09;在某些方面有相似的功能&#xff0c;但它们的 核心用途和适用场景不同。以下是它们的主要区别和联系&#xff1a; 1. Docker Compose 和 Kubernetes 的区别 对比项Docker ComposeKubernetes&#xff08;K8s&#xff0…

晶艺代理,100V3.5A高耐压LA1823完全替换MP9487--启烨科技有限公司

晶艺品牌LA1823是异步降压转换器&#xff0c;COT控制&#xff0c;PFM工作模式, 150KHz/ 250KHz/ 450KHz &#xff0c;开关频率可调节&#xff0c;输入电压4.5~100V&#xff0c;2A平均电流&#xff0c;峰值电流3.5A&#xff0c;采用ESOP8封装。 晶艺LA1823的特性&#xff1a; 4.…

PLC控制柜在技术创新驱动中功能演进 尤劲恩科技

在智能制造体系中&#xff0c;PLC控制柜不仅承担着传统设备控制的基础功能&#xff0c;更通过工业以太网、PROFIBUS等现场总线技术&#xff0c;构建起分布式控制系统&#xff08;DCS&#xff09;。这种拓扑结构使生产线具备实时数据采集、远程监控和智能决策能力&#xff0c;显…

【JavaEE】Spring Boot 日志

目录 一、日志概述二、使用日志2.1 打印日志2.2 日志框架2.2.1 门面 / 外观 模式 2.3 日志级别2.3.1 六大分类2.3.2 使用 2.4 日志级别配置2.5 日志的持久化2.6 日志文件分割2.7 日志文件格式2.8 Slf4j 简单打印日志 一、日志概述 ⽇志主要是为了发现问题, 分析问题, 定位问题…

uniapp APP权限弹框

效果图 第一步 新建一个页面&#xff0c;设置透明 {"path": "pages/permissionDisc/permissionDisc","style": {"navigationBarTitleText": "","navigationStyle": "custom","app-plus": {&…

(性能测试)性能测试工具 2.jmeter的环境搭建 3jmeter元件和4使用实例 5jmeter元件和参数化

目录 性能测试工具 性能测试工具 jemeter环境搭建 jmeter的常用目录介绍 jmeter修改语言和主题--jmeter界面的汉化 jmeter元件 jmeter元件和组件的介绍 jmeter的作用域原则 jmeter的执行顺序 案例&#xff1a;执行顺序 jmeter使用案例 jmeter线程组的介绍 jmeter…

Qt程序基于共享内存读写CodeSys的变量

文章目录 1.背景2.结构体从CodeSys导出后导入到C2.1.将结构体从CodeSys中导出2.2.将结构体从m4文件提取翻译成c格式 3.添加RTTR注册信息4.读取PLC变量值5.更改PLC变量值6.Qt读写CodeSys的共享内存 1.背景 在文章【基于RTTR在C中实现结构体数据的多层级动态读写】中&#xff0c…

计算机视觉——深入理解卷积神经网络与使用卷积神经网络创建图像分类算法

引言 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称 CNNs&#xff09;是一种深度学习架构&#xff0c;专门用于处理具有网格结构的数据&#xff0c;如图像、视频等。它们在计算机视觉领域取得了巨大成功&#xff0c;成为图像分类、目标检测、图像分…

服务性能防腐体系:基于自动化压测的熔断机制

01# 背景 在系统架构的演进过程中&#xff0c;项目初始阶段都会通过压力测试构建安全护城河&#xff0c;此时的服务性能与资源水位保持着黄金比例关系。然而在业务高速发展时期&#xff0c;每个冲刺周期都被切割成以业务需求为单位的开发单元&#xff0c;压力测试逐渐从必选项…