Java String、StringBuffer、StringBuilder的效率

学习String,StringBuffer,StringBuilder之前我们需要对String在JVM中的存储结构有初步了解。

(153条消息) Java String在JVM中的内存模型_TGO-Ming的博客-CSDN博客
在项目的开发过程做我们经常有对String字符串有修改操作的情况,这里记录一下开发过程做因为String值平凡变更导致影响效率的情况


  • String叠加字符串效率
    代码示例:


运行情况:

JVM中资源消耗情况这里我们主要关注堆内存和CPU
使用堆内存:259.9 MB, 提交:785.9 MB, 最大: 1.9 GB
CPU占用率:13.1%
 


  •  StringBuffer叠加字符串效率
    代码示例:

    运行情况

    JVM中资源消耗情况这里我们主要关注堆内存和CPU
    使用堆内存:19.8MB, 提交:129 MB, 最大: 1.9 GB
    CPU占用率:0.5%

  •  StringBuilder叠加字符串效率
    代码示例:

    运行情况:


    JVM中资源消耗情况这里我们主要关注堆内存和CPU
    使用堆内存:19.1MB, 提交:129 MB, 最大: 1.9 GB
    CPU占用率:0.1%


字符串叠加方法堆内存使用量堆内存提交最大堆内存CPU占用率运行耗时
String259.9 MB785.9 MB1.9 GB13.1%42141 ms
StringBuffer19.8MB129 MB1.9 GB0.5%73 ms
StringBuilder19.1MB129 MB1.9 GB0.1%53 ms

 

 

总结:
String:不论是CPU还是堆内存的耗费都是最大,原因就在于,String的每次叠加都会导致在常量池中创建全新的字符串,而上一次的字符串也同样存在于常量池中,如此迭代,导致常量池中存在大量的垃圾字符串,没有GC之前会占用大量的存储空间。由于不断创建全新的字符串在常量池中,所以它的CPU占用率和耗时都是最高的。而StringBuffer和StringBuilder 就不会不断创建全新字符串,而是单纯的做字符串叠加。
StringBuffer:可以看到他的内存空间的消耗和StringBuilder是相当的,只是CPU占用率高了些,同时耗时也高一些(经过多次测试均是这个结果)。那么为什么Buffer效率要略微低于StringBuilder呢?原因就在于Buffer是线程安全的而Bilder是线程不安全的,我们这里对比一下就知道了,如下
Buffer在每次叠加都需要上锁,会耗费一定资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值