请问 我自己定义一个字节型的数组缓冲区后 这个数组的长度 我第一次定义是1024*100 拷贝文件速度
平均大概30毫秒 第二次定义是657832 拷贝文件平均时间大概是300毫秒 同样都是 6位数字 为什么第一
次比第二次快那么多 请帮我分析下这个过程 和 内存知识!
代码如下
class Copy1 {
static void copy()throws Exception {
FileInputStream fi =
new FileInputStream("fists.mp3");
FileOutputStream fo =
new FileOutputStream("aa.mp3");
byte [] by = new byte [1024*100]; //new byte [657832];
int num = 0;
while ((num=fi.read(by))!=-1) {
fo.write(by,0,num);
fo.flush();
}
fo.close();
fi.close();
}
}
平均大概30毫秒 第二次定义是657832 拷贝文件平均时间大概是300毫秒 同样都是 6位数字 为什么第一
次比第二次快那么多 请帮我分析下这个过程 和 内存知识!
代码如下
class Copy1 {
static void copy()throws Exception {
FileInputStream fi =
new FileInputStream("fists.mp3");
FileOutputStream fo =
new FileOutputStream("aa.mp3");
byte [] by = new byte [1024*100]; //new byte [657832];
int num = 0;
while ((num=fi.read(by))!=-1) {
fo.write(by,0,num);
fo.flush();
}
fo.close();
fi.close();
}
}
推荐你看<深入理解计算机系统>一书应该是缓存的问题
缓存的一块一般是2^n个字节,一次读文件会读2^n字节进来
一般设置数组长度为2^n会提高缓存命中
n和缓存相关
所以有时候在优化的时候会补齐到2^n长度的数组,即使用不到