想不明白for循环中语句对执行效率是什么影像?循环中为空时候 耗时几乎是0毫秒,是输出时耗时100以上毫秒,是list的add运算时耗时5毫秒。

想不明白for循环中语句对执行效率是什么影像?循环中为空时候 耗时几乎是0毫秒,是输出时耗时100以上毫秒,是list的add运算时耗时5毫秒。

for循环中有输出语句时候耗时较多;


    public static void main(String[] args){
        long s = System.currentTimeMillis();
        for (int i = 0; i < 9999; i++) {
            System.out.println(i);
        }
        long e = System.currentTimeMillis();
        System.out.println("程序共耗时"+(e-s)+"毫秒");//输出116毫秒
    }

for循环中无语句时候耗时几乎为零;

    public static void main(String[] args){
        long s = System.currentTimeMillis();
        for (int i = 0; i < 9999; i++) {
        }
        long e = System.currentTimeMillis();
        System.out.println("程序共耗时"+(e-s)+"毫秒");//输出0毫秒
    }

for循环中有运算语句时候耗时几个毫秒;

    public static void main(String[] args){
        long s = System.currentTimeMillis();
        for (int i = 0; i < 9999; i++) {
            List list = new ArrayList<>();
            list.add(i);
        }
        long e = System.currentTimeMillis();
        System.out.println("程序共耗时"+(e-s)+"毫秒");//输出5毫秒
    }

题主可以看下println()这个方法的源码的,里面调用了很多的方法,个人猜测是这些方法所消耗的时间片积少成多所以显得比较耗时的

img

  • System.out.println()是IO操作,IO操作(输入输出)通常比较耗时。
  • 为什么IO会耗时呢?因为IO操作会触发系统调用,系统调用会导致用户态到内核态的切换。
  • 为什么不能不转换直接用内核态呢?因为不能让用户随意篡改计算机,会导致计算机崩溃;计算机资源是有限的,所有资源共享的,需要CPU进行调度管理。
  • 底层原理:为了相对公平的分配有限的IO资源,CPU以时间片为单位进行分配。需要相同系统调用的资源的任务,按照一定顺序排序,然后在有限的时间内进行执行,到时间以后不论是否执行完毕,需要把资源让给下一个任务。调用时间较长,一个时间片执行不完,需要排队的时间也就更多一些。