LMK;抖动、泄漏与溢出
流畅不卡
内存抖动
短时间内有大量对象创建销毁,它伴随着频繁的GC。
比较典型的就是字符串的拼接造成内存抖动。
比如:
String str = "";
for(int i=0; i<10; i++) {
str += i;
}
+=操作会编译成StringBuilder,然后调用StringBuilder的append方法进行拼接。
所以这里会创建10个StringBuilder对象,每执行一次+操作都会新创建一个StringBuilder对象。
优化方法:
StringBuilder result = new StringBuilder();
// 10000
for (int i = 0; i < values.length; i++) {
result.append(result).append(values[i]);
}
内存抖动会造成的问题:卡顿和OOM
卡顿
内存抖动会引起频繁的gc,gc是会stw的,会暂停用户线程。
OOM
CMS垃圾回收器老年代标记-清除算法:会产生内存碎片。