【面试:并发篇35:多线程:设计模式】享元模式

本文介绍了享元模式在多线程和并发编程中的应用,主要关注于String类和包装类的实现。通过保护性拷贝的概念,阐述了为何String类的某些操作会返回新对象。文章探讨了享元模式的重要性,特别是在减少大量相同对象创建时的内存占用。举例说明了Boolean、Integer等包装类的valueOf方法如何实现对象的复用,并详细分析了String类的字符串常量池,通过多个验证实验展示了其工作原理。
摘要由CSDN通过智能技术生成

【面试:并发篇35:多线程:设计模式】享元模式

00.前言

如果有任何问题请指出,感谢。

01.介绍

保护性拷贝介绍

我之前的一篇文章浅显的模拟过String类 当时是为了探究为什么String类是不可变类型 文章地址在
https://blog.csdn.net/m0_71229547/article/details/125757561?spm=1001.2014.3001.5502
里面重要的结论就是 因为value数组是final修饰的 导致地址引用不可改变 所以Sting类的赋值 或者 获取子类的这种方法 其实都是再新new一个对象 然后返回,所以String类每次操作后返回的对象都是新的对象所以不可变,大家也可以看一下String类的substring方法

可以看出substring方法也是返回一个新的对象,这种通过创建副本对象来避免共享的手段称之为 保护性拷贝

享元模式介绍

保护性拷贝会出现说明问题就是如果对String类操作过多 势必会创建出非常多的对象 很显然是不合适的,所以出现了享元模式 它的使用场景是 当需要重用的数量有限的同一类对象时,例如我们的字符串 假如某个字符串已经有了 我们可以直接用这个字符串对象 而不用再重写创建一个

02.享元模式在常见类中的体现

包装类

在jdk中 Boolean Byte Short Integer Long Character等包装类提供了valueOf()方法 例如Long的valueOf会缓存-128-127之间的Long对象,在这个范围之间会重用对象,大于这个范围,才会新建Long对象

注意

1.Byte Short Long缓存的范围都是-128-127
2.Character缓存的范围是0-127
3.Integer的默认范围是-128-127
最小值不能变
但是最大值可以通过调整虚拟机参数 -Djava.lang.Integer.IntergerCache.high来改变
4.Boolean缓存了TRUE和FALSE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I cream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值