这里有两个因素:时间和内存消耗.时间主要受调用java.lang.AbstractStringBuilder.expandCapacity()的次数的影响.当然,每次调用的成本与缓冲区的当前大小成线性关系,但我在这里简化并计算它们:

expandCapacity()的数量(时间)

默认配置(16个字符容量)

>在60%的情况下,StringBuilder将扩展0次

>在39%的情况下,StringBuilder将扩展8次

>在1%的情况下,StringBuilder将扩展11次

预期的expandCapacity数量为3,23.

初始容量为4096个字符

>在99%的情况下,StringBuilder将扩展0次

>在1%的情况下,StringBuilder将扩展3次

预期的expandCapacity数为0,03.

正如您所看到的,第二种情况似乎要快得多,因为它很少需要扩展StringBuilder(每100个输入三次).但请注意,第一次扩展不太重要(复制少量内存);此外,如果您以巨大的块为构建器添加字符串,它将在更少的迭代中更加热切地扩展.

另一方面,内存消耗增长:

内存消耗

默认配置(16个字符容量)

>在60%的情况下,StringBuilder将占用16个字符

>在39%的情况下,StringBuilder将占用4K个字符

>在1%的情况下,StringBuilder将占用32K字符

预期的平均内存消耗为:1935个字符.

初始容量为4096个字符

>在99%的情况下,StringBuilder将占用32K字符

预期的平均内存消耗为:4383个字符.

TL; DR

这让我相信将初始缓冲区扩大到4K会使内存消耗增加两倍以上,同时将程序加速两个数量级.

底线是:试试!编写一个能够处理具有不同初始容量的不同长度的百万字符串的基准并不难.但我相信更大的缓冲区可能是一个不错的选择.

java stringbuffer长度_java – 具有极大变化长度的输入的最佳StringBuffer初始容量是多少?...相关推荐

  1. java判断字符长度_java判断中文字符串长度的简单实例

    话不多说,上代码: /** * 获取字符串的长度,如果有中文,则每个中文字符计为2位 * @param value 指定的字符串 * @return 字符串的长度 */ public static i ...

  2. java判断字符串长度_java判断中文字符串长度的简单实例

    /** * 获取字符串的长度,如果有中文,则每个中文字符计为2位 * @param value 指定的字符串 * @return 字符串的长度 */ public static int length( ...

  3. java 设置数组长度_java如何增加数组长度

    遇到一个面试题:在不使用list的add方法的情况下,动态的添加元素(大概是这个样子): ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,需学习arraylist的相关知识(ht ...

  4. java 数组对象长度_Java中的数组长度:关于Java中数组长度的所有信息

    Java中的数组可以包含多个元素,这取决于对象是如何创建的.为了让用户执行不同的操作,必须知道数组的长度.这篇关于"Java中的数组长度"的文章旨在让我们熟悉用于获取数组长度的操 ...

  5. java获取byte 长度_java获取字节的长度.

    我们经常要获取中文,数字,或者英文字符所占字节的长度,下面就列出各种编码格式下所占字节的长度: 代码如下: package pack.java.midea.dao; import java.io.Un ...

  6. java 数组的长度_JAVA怎样获取数组长度?

    展开全部 public class Test { public static void main(Sring[] args) { int[] ary = {1,3,5,7,8} ; //数组中装了5个 ...

  7. java 字母随机数_java如何生成指定长度的随机数字和英文的字符串

    最后贴一下完成的工具类代码 import java.util.Random; public class GeneId { /** * 随机生成包含大小写字母及数字的字符串 * @param lengt ...

  8. java创建list指定长度_java List 按指定长度分割

    public static List> splitList(List list, int groupSize){ int length = list.size(); // 计算可以分成多少组 i ...

  9. stringbuffer常用方法_Java 处理字符串常用的类:String StringBuilder StringBuffer

    在Android/Java开发中,用来处理字符串常用的类有3种: String.StringBuilder.StringBuffer. 它们的异同点: 1) 都是 final 类, 都不允许被继承; ...

最新文章

  1. 将项目通过git上传到bitbucket仓库 (附图)
  2. How to write an operating system
  3. mysql中影响数据库性能的因素讲解
  4. Z-Blog 扩展数据库 字段 二次开发
  5. 内存条能4+8混插吗?_笔记本内存条双通道提升有多大?实测FORESEE,你知道好处在哪吗...
  6. 乌龟量化估值怎么看_推荐几个查询指数估值的网址
  7. mariadb驱动下载教程_性能测试教程[3] nmon analyser
  8. 怎么让照片变年轻_做了隆鼻,至少年轻5岁
  9. 大屏scroll滚动轴样式
  10. 二部图 欧拉图 哈密顿图 平面图 判定条件
  11. java工程师英文简历_软件工程师英文简历
  12. 线程启动、结束,创建线程多法、join,detach
  13. uniapp 实现识别图片二维码
  14. 【超级不爽】腾讯居然在我不知情未授权的情况下偷偷的转载我的博客文章
  15. C++虚函数、多继承和虚基类学习心得 内存布局
  16. 设计一个长方形类 java_用java设计一个长方形类,成员变量包括长和宽.方法:计算面积和周长,有相应的set和get方法...
  17. Kaldi中语言模型
  18. 汇报措辞:你懂得怎样向领导汇报吗(审阅、审批、批阅、批示、查阅)?
  19. 基础的网络服务器开发
  20. python3中 os.path.realpath(__file__) 的使用

热门文章

  1. pandas生成新的累加数据列、pandas生成新的累加数据列(数据列中包含NaN的情况)、pandas计算整个dataframe的所有数据列的累加
  2. Pandas批量删除dataframe列名中的前缀实战:使用lstrip函数批量删除列名中的前缀(prefix)、使用replace函数批量删除列名中的前缀(prefix)
  3. Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
  4. 深度学习时间序列预测:卷积神经网络(CNN)算法构建单变量时间序列预测模型预测空气质量(PM2.5)+代码实战
  5. 核磁共振影像数据处理-1(上)-个人简介和系列内容介绍、Li‘s have a solution and plan.
  6. sklearn使用pipeline、ParameterGrid以及GridSearchCV进行超参数调优
  7. linux下文件夹函数,如何从linux上的文件夹中找到一个函数
  8. centos中的mysql安装配置,Linux下安装配置MySQL
  9. 统计简单学_正态分布
  10. 阿里云云服务器ECS上的Ubuntu16.04桌面安装及root账户登录错误处理