面试刷题5:String StringBuffer StringBuilder区…
2020-03-24 16:24:29来源:博客园 阅读 ()
面试刷题5:String StringBuffer StringBuilder区别?
字符串是应用中最广泛的存在,不容忽视。
我是李福春,我在准备面试,今天我们一起来回答问题。
String,StringBuffer,StringBuilder的区别是什么?
非常常见的面试题,一起来发散一下。
String
Java中最重要的类,提供了各种构造和管理字符串的操作;
它是Immutable类,即不可变,原生的保证了线程安全;
她的构造和各种操作都会产生一个新的String对象;所以要考虑内存和垃圾回收问题;
StringBuffer
线程安全的,为了解决String的操作产生很多中间String对象的问题。继承自AbstractStringBudiler,同步方法是在对应的操作方法中简单粗暴的加上syncronized关键字。
虽然不产生新的中间String对象,但是内部有一个数组负责存储,提前设置合理大小可以避免数组扩容引起的性能损耗。
StringBuilder
同StringBuffer,不过是线程非安全的。
java8底层已经把字符串的+操作自动转换为StringBuilder的拼接操作;
字符串缓存
把jvm的堆转储,(dump heap)发现半数是重复的,如果可以避免重复的字符串,可以有效降低内存消耗和对象创建开销。
可以通过jvm的参数设置缓存池的大小 -XX:StringTableSize=x
intern是一种显示的排重机制,但是不推荐使用;
最新的jdk8,使用G1 GC,指定字符串排重参数可以达到底层去重的效果:
-XX:+UseStringDedumplication
其它字符串的底层优化
比如使用本地内联方法的intrinsic机制来优化字符串的操作速度;
改变StringBuilder的存储的数据结构为Compact Strings提高存储效率;
小结
本篇简单的回答了String,StringBuffer,StringBuilder的区别。
然后分析了StringBuffer,StringBuilder底层代码,提出来提前设置大小的优化建议;
字符串缓存是提高存储效率的中重要途径,最好使用jvm的参数进行调优。
原创不易,转载请注明出处。
原文链接:https://www.cnblogs.com/snidget/p/12560071.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:好好的Timer居然有坑?
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- JVM常见面试题解析 2020-06-11
- 作为一个面试官,我想问问你Redis分布式锁怎么搞? 2020-06-10
- 送你一份年薪百万的抖音Java岗内部面试题 2020-06-09
- 一口气说出 6种 延时队列的实现方案,面试稳稳的 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash