1string,Stringbuffer,StringBuilder
String 线程安全,不可修改继承。操作不当大量临时字符串
StringBuffer 线程安全 synchronize修饰
StringBuilder 非线程安全
2 容量问题
StringBuffer和StringBuilder底层是char数组,默认是16的长度,如果频繁扩容会导致大量的数组拷贝
3 字符串缓冲
字符串常量池,可以缓存很多字符串,规避程序创建太多重复的字符串,浪费内存。创建完字符串后,调用intern方法会将字符串添加到缓存。但是不推荐调用intern方法,因为jdk1.6字符串常量池在持久代,只要full gc才会回收。会导致频繁full gc。jdk1.8之后G1垃圾回收可以指定参数-XX:+useStringDepulication进行字符串去重
4 jdk1.9改变
string在jdk1.9由char数组改为了byte数组,节约内存。因为一般的字符一个byte就可以表示了。
网友评论