使用JAVA对内存进行读写测试

JAVA内存测试

使用JAVA对内存进行读写测试

基本思想

测试的方法是先在内存中建立一个大数据,然后记录读取的时候,从而理解内存的速度。
主要代码包括三块
1 定义大数据
这里定义了一个长度约为10亿(2^30)的数组。
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. 写内存:内存写的时间约为 49.3 ms 写 1GiB长的数组。
  2. 读内存:时间为 (5541-3425)/10 = 211 ms
    初步的结论是内存写比读更快,这个结论有点奇怪,需要进一步分析。

猜你喜欢

转载自blog.csdn.net/weixin_43145361/article/details/84305067