String:Immutable的典型实现 无法对原生数据进行修改,拼接和裁剪都会产生新的String对象。
StringBuffer:线程安全 通过 synchronized实现
StringBuilder:线程不安全 去掉了synchronized 提高效率
StringBuffer 与 StringBuilder 两者都继承了 AbstractStringBuilder
AbstractStringBuilder 扩容算法:当前容量乘2加1(newCapacity) 与需要的容量(minimumCapacity)比较,如果大于则为newCapacity
如果小于最小的容量则直接扩容成 minimumCapacity
String字节缓存:
在JDK6版本使用intern()方法 放在permGen(永久代),不会被FullGC之外的垃圾回收到,使用不当会被OOM关顾。
其之后版本 缓存会被放入堆中 在JDK8后放入到 MetaSpace(元数据区)
main方法中JVM参数 :
-XX:+PrintStringTableStatistics -XX:StringTableSize=N -XX:+UseStringDeduplication
-XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining
网友评论