java – System.out.print导致延迟?
发布时间:2020-12-15 02:14:26 所属栏目:Java 来源:网络整理
导读:参见英文答案 Do not use System.out.println in server side code????????????????????????????????????9个 我有一个简单的程序,我从我的Java编程书中获得,只是添加了一点. package personal;public class SpeedTest { public static void main(String[] ar
参见英文答案 >
Do not use System.out.println in server side code????????????????????????????????????9个
我有一个简单的程序,我从我的Java编程书中获得,只是添加了一点. package personal; public class SpeedTest { public static void main(String[] args) { double DELAY = 5000; long startTime = System.currentTimeMillis(); long endTime = (long)(startTime + DELAY); long index = 0; while (true) { double x = Math.sqrt(index); long now = System.currentTimeMillis(); if (now >= endTime) { break; } index++; } System.out.println(index + " loops in " + (DELAY / 1000) + " seconds."); } } 这将在5.0秒内返回128478180个循环. 如果我添加System.out.println(x);在if语句之前,那么我在5秒内的循环次数下降到400,000s,这是由于System.out.println()中的延迟吗?或者只是在我没有打印出来的时候没有计算x? 解决方法
任何时候你在一个非常繁忙的循环中“输出”,无论使用任何编程语言,你都会引入两个可能非常重要的延迟:
>必须将数据转换为可打印字符,然后写入它可能要显示的任何显示/设备……并且…… 通常用于此目的的一种替代策略是“跟踪表”.这是一个内存数组,有一些固定大小,包含字符串.条目以“循环”方式添加到此表中:最旧的条目不断被最新条目替换.该策略提供历史而不需要输出. (剩下的唯一要求是,任何向表中添加条目或从中读取条目的人必须同步其活动,例如使用互斥锁.) 希望显示跟踪表内容的进程应该获取互斥锁,制作感兴趣内容的内存副本,然后在准备输出之前释放互斥锁.通过这种方式,为跟踪表提供条目的各种进程不会被I / O相关的延迟源延迟. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |