首页 > 代码库 > 1ms的时间内java能干什么?

1ms的时间内java能干什么?

有没有人想过1ms里面java能做什么?很多人说计算机很快快到无法想象1ms的时间内java能做很多时间,有的人说java很慢1ms里面做不了太多事情。今天我用实验来告诉大家究竟1ms里面java能做什么,java究竟有多快(或者有多慢)

实验背景

CPU: i5-4200U
内存: 8G
Eclipse

实验一

让java重复100次打印当前的毫秒数,够简单吧,没有任何的逻辑操作,大家觉得java有多快?
public class A {
	public static void main(String[] args) {
		for (int i = 0; i < 100; i++) {
			System.out.println(System.currentTimeMillis());
		}
	}
}
实验输出结果:
1406079200638
1406079200638
1406079200638
……
1406079200638
1406079200639
1406079200639
1406079200639
1406079200639
……
1406079200639
1406079200639
1406079200639
1406079200639
1406079200640
……
1406079200640
1406079200640

结果中重复的部分我用省略号代替了。结果中出现了3个数,1406079200638出现了32次,1406079200639出现了59次, 1406079200640出现了9次
我的机器连在1ms里面循环100次打印都做不到。

实验二

用一个Map保存当前每一个毫秒的计数结果,每次循环从这个map中用当前的毫秒数为key获取value,value是一个int型,然后把这个int型自增1之后打印出来,再保存回去

计数器

/**
 * 计数器 
 * @author alexy
 *
 */
public class B {
	private HashMap<Long, Integer> counter = new HashMap<Long, Integer>();

	public HashMap<Long, Integer> getCounter() {
		return counter;
	}

	public void setCounter(HashMap<Long, Integer> counter) {
		this.counter = counter;
	}
	
}

打印逻辑

public class A {
	public static void main(String[] args) {
		
		B b = new B();
		
		for (int i = 0; i < 100; i++) {
			long time = System.currentTimeMillis();
			Integer count = b.getCounter().get(time);
			if(count == null){
				count = new Integer(1);
				System.out.println(time + " : " + count);
				b.getCounter().put(time, count);
			}else{
				int newCount = count.intValue() + 1;
				System.out.println(time + " : " + newCount);
				b.getCounter().put(time, newCount);
			}
		}
	}
}

输出结果:
1406080147962 : 1
1406080147962 : 2
1406080147963 : 1
1406080147963 : 2
1406080147963 : 3
1406080147963 : 4
1406080147963 : 5
1406080147963 : 6
1406080147963 : 7
1406080147963 : 8
1406080147963 : 9
1406080147963 : 10
1406080147963 : 11
1406080147963 : 12
1406080147963 : 13
1406080147964 : 1
1406080147964 : 2
1406080147964 : 3
1406080147964 : 4
1406080147964 : 5
1406080147964 : 6
1406080147964 : 7
1406080147964 : 8
1406080147964 : 9
1406080147964 : 10
1406080147964 : 11
1406080147964 : 12
1406080147964 : 13
1406080147964 : 14
1406080147964 : 15
1406080147964 : 16
1406080147964 : 17
1406080147964 : 18
1406080147964 : 19
1406080147964 : 20
1406080147964 : 21
1406080147964 : 22
1406080147964 : 23
1406080147964 : 24
1406080147964 : 25
1406080147964 : 26
1406080147964 : 27
1406080147964 : 28
1406080147964 : 29
1406080147964 : 30
1406080147964 : 31
1406080147964 : 32
1406080147964 : 33
1406080147964 : 34
1406080147964 : 35
1406080147964 : 36
1406080147965 : 1
1406080147965 : 2
1406080147965 : 3
1406080147965 : 4
1406080147965 : 5
1406080147965 : 6
1406080147965 : 7
1406080147965 : 8
1406080147965 : 9
1406080147965 : 10
1406080147965 : 11
1406080147965 : 12
1406080147965 : 13
1406080147965 : 14
1406080147965 : 15
1406080147965 : 16
1406080147965 : 17
1406080147965 : 18
1406080147965 : 19
1406080147965 : 20
1406080147965 : 21
1406080147965 : 22
1406080147965 : 23
1406080147965 : 24
1406080147965 : 25
1406080147965 : 26
1406080147965 : 27
1406080147965 : 28
1406080147965 : 29
1406080147965 : 30
1406080147965 : 31
1406080147966 : 1
1406080147966 : 2
1406080147966 : 3
1406080147966 : 4
1406080147966 : 5
1406080147966 : 6
1406080147966 : 7
1406080147966 : 8
1406080147966 : 9
1406080147966 : 10
1406080147966 : 11
1406080147966 : 12
1406080147966 : 13
1406080147966 : 14
1406080147966 : 15
1406080147966 : 16
1406080147966 : 17
1406080147966 : 18

java打印的情况并不平均,最多的情况下能打36次,最少的情况打印13次,最开始的那段是不完整的1ms所以不算

数据抖动范围

其实这个实验不能给出最准确的结果,因为服务器的配置肯定比我的电脑强,但是服务器有时候的负载比较大,我的电脑在测试的时候又没有运行任何别的程序,这点上我的电脑又可以加分。所以这个结果只是给大家一个感性的认知,并不作为最准确的试验结果,欢迎大家发布在服务器上的试验结果。

怎么样?现在觉得java比你想象中的快还是慢?