JAVA1G长数据读取速度约20G/s写入速度约5G/s

基本思想

算法:在内存中建立一个大数据,通过记录读取的过程,理解内存的速度。
主要代码包括三块:

  1. 定义大数据
    这里定义了一个长度约为10亿(230)的数组。
  2. 随机初始化这个数据
    使用Random函数对数组进行初始化。
  3. 进行数据求和
    使用循环进行数据累加。

主要代码如下所示。

package hello;

public class MemoryTest {

	public static void main(String[] args) {
		// data length: 1 GiB.
		int len = 1024 * 1024 * 1024;
		long result = 0;
		int runningTimes = 10;

		System.out.println("Declare an array of size: " + len);
		long t1 = System.currentTimeMillis();
		int[] its = new int[len];
		// int[] its1 = new int[len];
		
		System.out.println("Declaration Time(ms): " + (System.currentTimeMillis() - t1));

		long tw = 0; // 写数据时间
		long tr = 0; // 纯计算据时间
		long tarr = 0; // 读取array计算时间
		System.out.println("---------------- Writing Test ----------------");
		for (int i = 0; i < runningTimes; i++) {
			long ta = System.currentTimeMillis();
			int v = (int) (ta % (i + 10));
			for (int j = 0; j < len; j++)
				its[i] = v;
			long tb = System.currentTimeMillis();
			for (int j = 0; j < len - 1; j++) {
				result += v;
			}
			long tc = System.currentTimeMillis();
			for (int j = 0; j < len - 1; j++) {
				result += its[j];
			}
			long td = System.currentTimeMillis();

			tw += tb - ta;
			tr += tc - tb;
			tarr += td - tc;

			System.out.printf("Take %d:  Writing: %d ms. Direct: %d ms. Reading: %d ms. Results: %d.\n", i, tb - ta, tc - tb, td - tc, result);
		}

		System.out.printf("Writing: %d ms. Direct: %d ms. Reading: %d ms. Results: %d.\n", tw, tr, tarr, result);
	}
}

测试结果

测试如果如下所示

Declare an array of size: 1073741824
Declaration Time(ms): 1861
---------------- Writing Test ----------------
Take 0:  Writing: 33 ms. Direct: 352 ms. Reading: 479 ms. Results: 3221225472.
Take 1:  Writing: 65 ms. Direct: 337 ms. Reading: 553 ms. Results: 11811160067.
Take 2:  Writing: 60 ms. Direct: 337 ms. Reading: 566 ms. Results: 18253611022.
Take 3:  Writing: 57 ms. Direct: 337 ms. Reading: 565 ms. Results: 24696061983.
Take 4:  Writing: 43 ms. Direct: 370 ms. Reading: 552 ms. Results: 34359738422.
Take 5:  Writing: 57 ms. Direct: 338 ms. Reading: 556 ms. Results: 35433480278.
Take 6:  Writing: 42 ms. Direct: 336 ms. Reading: 562 ms. Results: 48318382199.
Take 7:  Writing: 42 ms. Direct: 336 ms. Reading: 565 ms. Results: 55834575012.
Take 8:  Writing: 42 ms. Direct: 336 ms. Reading: 599 ms. Results: 57982058712.
Take 9:  Writing: 52 ms. Direct: 346 ms. Reading: 544 ms. Results: 71940702478.
Writing: 493 ms. Direct: 3425 ms. Reading: 5541 ms. Results: 71940702478. 

结论

  1. 写内存:1G长的数组所耗时间约为49.3ms,读取速度约为:20G/s
  2. 读内存:时间为 (5541-3425)/10 = 211 ms,写入速度约为: 5G/s
    初步结论:内存写比读更快,结论与常规差异较大,需要进一步分析。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值