String的优化 Stringbuffer和Stringbuilder
2024-09-01 08:28:30
string
上次说到string是最好衍生出来的一种字符类型,实现原理是由char[]。我们知道数组一旦创建时不可更改的,所以每一次进行字符串的拼接都是在new一个新的字符串进行添加,这样的话对内存的消耗极大在jdk1.0开始出现了stringbuffer优化 而创建对象的形式是在堆内存中存放的所以为了确保安全性stringbuffer添加了大量的重量锁(synchronize)由于加锁的原因导致了他的效率并不是太高,在jdk1.5之后又诞生了一个新的string的优化stringbuilder取消了大量的重量锁(synchronize)提高了效率但是导致了线程不安全。看情况进行使用
stringbuffer
jdk1.0诞生的stringbuffer,它是对字符串进行的拼接对内存的消耗小,内部提供了append()方法。当数据到达一定的量就会触发扩容。初始容量为16 每一次扩容都会length*2+2。可能会有有人问到为什么要加2,因为这个初始容量是可以设定的如果初始容量设置为0不进行加2永远都是0。每一次进行拼接字符串的过程中都有重量锁(synchronize)所以效率比较低
stringbuilder
jdk1.5诞生的stringbuilder,他和stringbuffer的操作是一样的只不过后来减少了重量锁的所以提高了效率但是这也导致了线程的不安全看业务需求选择使用buffer或者builder。
最新文章
- iOS 分析一个支持GIF的UIImage扩展:SwiftGIF
- mysql和CSV
- debain 8安装为知笔记(how to install wiznote in debain 8)
- ORACLE用SYS登录报ORA-28009:connection as SYS should be as SYSDBA OR SYSOPER解决方法
- bzoj 1834: [ZJOI2010]network 网络扩容
- Server.Transfer和Response.Redirect区别
- golang rbac框架
- DOM 1
- 深入理解Java虚拟机博客参考目录
- quartz 两次执行问题
- java+++IO流操作
- 非极大值抑制(Non-Maximum Suppression,NMS)
- [luogu1402]酒店之王_网络流
- Groovy 反射字符串常量方法
- 在Android项目中使用AspectJ
- USB基础知识概论(版本:v0.9.2)
- Win10系统 Eclipse 下'Publishing to Tomcat'has encountered a problem解决办法
- IPv4到IPv6的三种过渡技术
- Android 下拉菜单 Spinner 赋值
- jquery全选 反选
热门文章
- react native 8081 端口号被占
- 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking
- 设计模式(C#)——03建造者模式
- Leetcode之深度优先搜索(DFS)专题-1123. 最深叶节点的最近公共祖先(Lowest Common Ancestor of Deepest Leaves)
- 通过sql命令建表 和 主外键约束以及其他约束
- Python数据类型详解——元组
- 第8章 浏览器对象模型BOM 8.1 window对象
- Intel X86 32位CPU内存管理----《Linux内核源码情景分析》笔记(一)
- jvm默认垃圾收集器(JDK789)
- ElasticSearch常见经典面试题