`
KillEr_Jok
  • 浏览: 150149 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

关于StringBuffer的缓存

 
阅读更多

列一组数据

 

StringBuffer sb  = new StringBuffer();//原始长度即sb.length();
for(int i =0 ;i<1000;i++){
     sb.append("0");
     //表中缓存空间值取自sb.capacity();
}

 

长度、缓存空间、原始长度


首先我们得知道StringBuffer的默认初始缓存空间大小16

 

public StringBuffer(){
    super(16);
}

 

 

不同构造函数,初始缓存空间大小不同

 

public StringBuffer(int c){
    super(c);
}
public StringBuffer(String str){
    super(str.length()+16);
    append(str);
}

 根据不同构造函数,结合上面表格数据,就可以发现一个规律

 

StringBuffer的长度在大于缓存空间大小时,缓存空间会自动扩充,这个扩充大小为当前长度*2+2。第一次的扩充时间取决于初始缓存空间。

然后回过头再去看源码。

if(newCount>value.length)
expandCapacity(newCount)

 这句话出现在父类AbstractStringBuilder 的append中。

然后我们再来看expandCapacity(int i)

void expandCapacity(int i){
    int newCapacity = (value.length+1) *2; //这句话是重点
    if(newCapacity < 0 ){
        newCapacity = Integer.MAX_VALUE;
    }else if (minimumCapacity > newCapacity){
        newCapacity = i;
    }
    value = Arrays.copyOf(value,newCapacity);
}

 第二句的公式,就很清楚的说明了扩充规则

 

 

  • 大小: 4.3 KB
分享到:
评论

相关推荐

    java面试笔试题String 和StringBuffer的区别

    2. **缓存效率**:当创建相同的字符串时,如果该字符串已经存在于字符串池(String Pool)中,则不会创建新的实例,而是返回已存在的引用。这避免了内存中存在多个相同字符串副本的情况,提高了空间效率。 3. **性能...

    jsp简单的分页,利用stringbuffer动态地加数据

    7. **优化性能**:为了避免每次都查询整个用户表,可以考虑缓存页码和对应的数据,或者使用数据库的分页功能。 这个例子中没有涉及具体的代码实现,但大致流程就是这样。在实际项目中,你可能还需要考虑错误处理、...

    java 创建字符串缓存类

    通过使用`StringBuffer`或`StringBuilder`以及自定义缓存类,我们可以有效地管理字符串对象,避免不必要的内存分配。在实际项目中,可以根据需求调整缓存大小、选择合适的线程安全机制,以达到最佳的性能和资源利用...

    StringBuffer、StringBuilder、String

    每当 `StringBuffer` 被修改时,`toStringCache` 就会被清空(设置为 `null`),以确保缓存的有效性。 ```java private transient char[] toStringCache; @Override public synchronized String toString() { if ...

    Java缓存处理大量Json数组 StringBufferCacheUtil.java

    主要用来缓存处理大量的Json数组的工具类,比如:TCP编程时,客户端或服务端(等等)接收大量Json数据时,由于受到字节数组的长度问题,不能读取一个完整的json字符串,此方法就是用StringBuffer作为缓存处理得到...

    5讲String、StringBuffer、Stri...1

    2. JVM对象缓存:了解`String`池的概念,以及何时和为什么字符串常量会被存储在池中。 3. 优化技巧:如何通过预估字符串长度来减少`StringBuffer`或`StringBuilder`的扩容次数,从而提高性能。 4. 类的演进:例如,...

    第5讲 String、StringBuffer、StringBuilder有什么区别1

    2. **对象缓存机制**:了解JVM如何缓存字符串常量,如`String Pool`,并讨论如何有效利用。 3. **JVM优化技巧**:探讨如何优化Java代码,减少不必要的字符串对象创建。 4. **类的演进**:讨论`String`相关类在不同...

    Java线程与缓存面试题,面试必看,附代码.docx

    Java线程与缓存是Java开发中至关重要的概念,尤其对于有一定经验的开发者来说,面试时往往会遇到相关问题。以下是对这些知识点的详细说明: 1. **基础信息** - **数据类型**:Java提供了八种原始数据类型,包括...

    浅谈Java如何实现一个基于LRU时间复杂度为O(1)的缓存

    StringBuffer sb = new StringBuffer("lru -&gt; "); DoubleListNode,V&gt; temp = lruNode.next; while(temp != null){ sb.append(temp.key + " " + temp.value + " "); temp = temp.next; } return sb.toString()...

    3160104875_杨樾人_homework31

    在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的重要类,它们各自具有不同的特性和使用场景。本文将对这三个类进行源代码分析,探讨它们的主要数据组织、功能实现以及性能差异。 1.1 ...

    SSH架构性能优化方案.pdf

    使用StringBuffer代替String可以提高性能,因为StringBuffer可以避免生成临时对象的开销。例如,可以使用StringBuffer的append方法代替String的“+”操作。 2. 生成对象时,分配合理的空间和大小 Java中的很多类都...

    Java高并发高性能分布式框架从无到有微服务架构设计.doc

    3. 优化代码:减少不必要的资源浪费,例如避免频繁的 new 对象,使用单例模式、StringBuffer 或者 StringBuilder 等。 4. 队列:可以使用队列来解决高并发问题,将所有请求放入队列,以毫秒计时单位,有序的进行,...

    java三种字符串处理差别

    - **不可变性:** `String`对象一旦创建就不可更改,这种特性使得`String`非常适合缓存场景。 - **内存消耗:** 频繁修改`String`会导致大量的临时对象生成,从而增加内存消耗及垃圾回收的压力。 - **性能:** 在...

    java生成随机密码

    - **原因**:选择使用`StringBuffer`而非`StringBuilder`或普通字符串是因为在多线程环境下,`StringBuffer`提供线程安全的特性,虽然在这个单线程示例中并不一定需要,但在实际应用中考虑到性能和线程安全问题时,...

    java程序员面试题(银河创想).pdf,这是一份不错的文件

    10. Hibernate的缓存机制:Hibernate支持一级缓存(Session级别的缓存)和二级缓存(SessionFactory级别的缓存)。一级缓存默认开启,存储最近查询的对象,提高读取速度。二级缓存可选,通过插件实现,用于跨Session...

    java performance7

    以下是一个关于密码隐藏处理的示例代码,展示了如何优化`StringBuffer`的使用: ```java public static String hidePassword(final String msg) { if (null == msg || msg.length() == 0) { return msg; } ...

    面试题全集(周瑜).pdf

    * String、StringBuffer、StringBuilder的区别 * 泛型中extends和super的区别 * ==和equals方法的区别 * 重载和重写的区别 二、Java集合框架 * List和Set的区别 * ArrayList和LinkedList的区别 * ...

Global site tag (gtag.js) - Google Analytics