JDK源码系列:StringBuffer与StringBuilder对比

48c65eaaae397fdce6c162d514556b0d.jpeg

一、源码分析StringBuffer与StringBuilder的区别

1、StringBuffer是多线程安全的,StringBuilder是多线程不安全的

多线程安全指的是 多个线程同时对一个对象进行append 等操作,不会出现覆盖、丢失的情况。

看下StringBuffer是如何做到多线程安全的:

fbe4cc9c06d83548d6dac23d734e2bf1.png

StringBuffer类中除了构造方法,几乎所有方法都加了synchronized关键字来保证线程安全。

相对来说StringBuilder就要任性的多:

231d6d0edefcb6e341269b48938c9608.png

2、性能问题「JDK1.8」

理论上 不加锁的方法肯定比加锁的方法要快,但在单线程场景下 应该说是两者差距不大了,因为 synchronized 在高版本jdk里经过了偏向锁的优化,性能接近单线程了。

但是toString方法要注意了,在单线程场景下多次调用toString方法,StringBuffer性能更高,因为它使用了缓存,而StringBilder没有使用缓存

3、内存占用问题

在多次调用toString 方法场景下,StringBuffer占用内存更少,因为使用了字符数组缓存共享,而StringBuilder没有使用缓存共享

4、toString()实现原理对比

这个方法最终是要调用的,看看有啥区别

1)StringBuffer实现

a6c498c9e17b0a43a688c7335a7eac66.png

由源码可以看出,不管调用多少次toString 方法,始终只会在第一次进行一次字符数组复制,之后就是共享,内存不会有大的变化(String对象是新的,但是内容一直在共享)

2)StringBuilder实现

e127686dfa2693f6b60ac58712d403a2.png

由源码可以看出,每调一次toString 方法,都会进行字符数组复制,产生一个崭新的String对象。在某些场景下可能出现内存占用问题。

二、实际使用中注意事项

由源码分析可知,对于较大的字符串拼接场景,toString方法使用不当,内存占用峰值会有很大差异

1、对StringBuffer而言toString()调用时机不同,内存峰值持续时间会有较大差异

假设需要一个方法来拼接一个大的字符串:

实现方式1:

6953fb45a4ddc3c963e62bcf28e60802.png

实现方式2:

653eda087a805cdd72e64c6b83e1de15.png

仔细体会这两种写法,思考内存变化情况

2、对StringBuilder而言toString()重复调用问题,如果不及时释放,内存占用会持续升高

对StringBuilder而言,除了1中提到的问题,还有一个内存不断升高问题

63f6299172bc6309d53bdabd278134df.png

关注吕哥,关注代码质量

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

思维模型 波纹效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。小变化,大影响。 1 波纹效应的应用 1.1 波纹效应在市场中的应用 2008 年,美国金融危机爆发,导致全球经济陷入衰退。这场危机的起因是美国房地产市场的崩…

一篇文章完成Hbase入门

文章目录 一、简介1、数据模型结构2、物理存储结构3、数据模型4、基本架构 二、安装1、下载解压安装包2、修改配置文件3、启动服务(单机、集群)4、配置高可用(HA) 三、命令行操作1、建表2、新增/更新数据3、查看表数据4、删除数据5、修改默认保存的数据版本 四、架构1、RegionS…

在 STM32 上实现温度补偿和校正

本文介绍了如何在 STM32 微控制器上实现温度补偿和校正,以提高温度传感器的测量精度。首先,我们将简要介绍温度补偿和校正的原理和目的。然后,我们将详细讨论在 STM32 上实现温度补偿和校正的步骤和方法。同时,提供了一个简单的示…

FPGA模块——SPI协议(读写FLASH)

FPGA模块——SPI协议(读写FLASH) (1)FLASH芯片 W25Q16BV(2)SPI协议(3)芯片部分命令1.Write Enable(06h)2.Chip Erase (C7h / 60h)3.写指令(02h&am…

华为ospf路由协议防环和次优路径中一些难点问题分析

第一种情况是ar3的/0/0/2口和ar4的0/0/2口发布在区域1时,当ar1连接ar2的线断了以后,骨干区域就断了,1.1.1.1到2.2.2.2就断了,ping不通了。但ar5和ar6可以ping通2.2.2.2和1.1.1.1,ar3和ar4不可以ping通2.2.2.2和1.1.1.1…

中伟视界:AI智能分析盒子实现全方位人车监测,保障管道安全

在油气管道长又无人的场景下,人和车的监测问题一直是一个难题。传统的监测手段往往存在盲区和误报问题,给管道运行安全带来了一定的隐患。然而,随着人工智能技术的不断发展,利用AI盒子的智能分析算法可以有效解决这一问题。 首先&…

【从浅识到熟知Linux】基本指定之cat、more和less

🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:写完这篇我要去吃晚饭啦!! 文章前言:本文介绍cat、more和less指令三种查看文件的用法并给出示例和截图…

MUYUCMS v2.1:一款开源、轻量级的内容管理系统

MuYuCMS:一款基于Thinkphp开发的轻量级开源内容管理系统,为企业、个人站长提供快速建站解决方案。它具有以下的环境要求: 支持系统:Windows/Linux/Mac WEB服务器:Apache/Nginx/ISS PHP版本:php > 5.6 (…

输出后,我悟了!

大家好,我是木川 今天和前同事吃饭聊天,谈到了输出,今天简单谈下关于输出的重要性 一、为什么要输出 1、不输出容易忘,如果不输出很容易就忘记了,如果再遇见一次,还是需要重新学习,实际上是浪费…

Transformer——decoder

上一篇文章,我们介绍了encoder,这篇文章我们将要介绍decoder Transformer-encoder decoder结构: 如果看过上一篇文章的同学,肯定对decoder的结构不陌生,从上面框中可以明显的看出: 每个Decoder Block有两个…

STK Components 二次开发-创建卫星

1.卫星数据 可以用stk 里面自带的 参数帮助文档。 也可以自己下载 CelesTrak: Current GP Element Sets 这里你所需要的最新卫星数据全有。 其实创建需要的就是卫星的二根数。 给定二根数也可以。 读取数据库中的卫星数据 这个接口优先下载最新的。 var tleList TwoL…

Web3 进入“殖民时代”

最近在 AI 和 Web3 领域发生了两件“大”事,两件事都具有指标意义,但在媒体上其意义都被大量的八卦细节给掩埋了。 其实看待任何重大事件,都可以有两种不同的视角。第一是娱乐的视角,在新闻事件中找乐子。如果是本着这个目的&…

HarmonyOS应用开发者高级认证【题库答案】

HarmonyOS应用开发者基础认证【题库答案】 一、判断题 云函数打包完成后,需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用(错)在column和Row容器组件中,aligntems用于设置子组件在主轴方向上的对齐格式&#xf…

自建私有化证书颁发机构(Certificate Authority,CA)实战之 《0x02 Nginx 配置 https双向认证》

自建CA实战之 《0x02 Nginx 配置 https双向认证》 上一章节我们已经实现了Nginx上配置https单向认证,主要场景为客户端验证服务端的身份,但是服务端不验证客户端的身份。 本章节我们将实现Nginx上配置https双向认证,主要场景为客户端验证服…

深度学习第二天:RNN循环神经网络

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 介绍 记忆功能对比展现 任务描述 导入库 处理数据 前馈神经网络 循环神经网络 编译与训练模型 模型预测 可能的问题 梯度消失 梯…

【基础知识】AB软件RSLinx如何实现OPC通讯组态

哈喽,大家好,我是雷工。 在上一节了解了什么是RSLinx?以及RSLinx Lite、RSLinx Classice、RSLinx Professional、RSLinx Gateway几个版本的特点。 本节了解AB的RSLinx如何实现OPC组态。 一、创建RSLinx通讯: 1.1、【Communicati…

RabbitMQ之发送者(生产者)可靠性

文章目录 前言一、生产者重试机制二、生产者确认机制实现生产者确认(1)定义ReturnCallback(2)定义ConfirmCallback 总结 前言 生产者重试机制、生产者确认机制。 一、生产者重试机制 问题:生产者发送消息时&#xff0…

(Matalb回归预测)GA-BP遗传算法优化BP神经网络的多维回归预测

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分代码: 四、分享本文全部代码数据说明手册: 一、程序及算法内容介绍: 基本内容: 本代码基于M…

IT行业多项目管理的方法与策略:优化资源分配与提升项目成功率

多项目管理已成为项目经理们面临的常态,IT行业如何高效进行项目管理呢? 多项目管理过程中存在的问题 1、多类型项目并行,项目流程掺杂混乱,项目进度难以监控,反应缓慢,容易产生延误风险。 2、团队资源有…

arp报文及使用go实现

一、ARP协议报文格式及ARP表 ARP(Address Resolution Protocal,地址解析协议)是将IP地址解析为以太网的MAC地址(或者称为物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备…