jjzjj

nanoTime

全部标签

java - nanoTime 可以跨线程工作吗

我有一个线程将数据插入队列,另一个线程从队列中读取数据并进行处理。我想检查数据在处理之前在队列中的停留时间。我在第一个线程推送之前在数据中添加了一个时间参数(使用System.nanoTime()计算)。一旦第二个线程处理它,它就会计算System.nanoTime()并找到与数据中之前设置的时间的差异。这能正常工作吗?我问这个是因为我在日志中看到了负面差异。更新我想澄清一下,开始时间是由一个进程放在不同机器上的,差异是在不同机器上计算的。 最佳答案 我在线程和进程之间使用了System.nanoTime()。在单台机器上它是全局的

java - System.getCurrentTimeMillis() 的性能开销

我正在制作一种概率模拟器,它将运行一定的时间或一定的重复次数。我想优化一下,目前是多线程的,每个ProbabilityWorker扩展Thread,主程序会自动分配n个线程,其中n是但是有很多线程可用(例如:在我的Corei3-7100U上,这是4)。我正在分析它的性能,我意识到我用来获取相对于结束时间的当前时间的方法会导致大量开销。对于它可以“运行一定时间”的模式,我将newDate对象作为循环条件的一部分,然后我将其更改为更快的System.currentTimeMillis()试图节省时间,但我注意到即使这样也会产生开销。我的run函数如下所示:publicvoidrun(){i

java - 如何将其包装为辅助函数?

假设我有这样的代码片段:try{//codeIneedtowraptobeahelperlongt0=System.nanoTime();obj.doSomething();//avoidfunctionlongt1=System.nanoTime();Logger.info("doSomthingtakes{}nanoseconds",t1-t0);}catch(IOExceptionex){Logger.error("somethingwronghappened");}//anothercodetry{longt0=System.nanoTime();obj.doAnotherTh

Java随机化字符串

我试图在不使用任何Random()函数的情况下生成无意义的单词。我发现我可以使用当前时钟或鼠标坐标。我选择使用当前时钟。这是我写的代码。privatefinalchar[]charray={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','

java - Java中的计时器精度

我正在为一些事情计时,我不能把它们放在一个很长的循环中。我需要给它们计时,看看它们需要多长时间才能完成,但似乎计时器在Java中的精度为15-16毫秒?我该如何解决这个问题? 最佳答案 您是否尝试过使用System.nanoTime()?来自Javadoc:Returnsthecurrentvalueofthemostpreciseavailablesystemtimer,innanoseconds.Thismethodcanonlybeusedtomeasureelapsedtimeandisnotrelatedtoanyothe

java - System.nanoTime 与 System.currentTimeMillis

根据其文档,System.nanoTime返回自某个固定但任意的原始时间以来的纳秒数。但是,在我尝试了以下代码的所有x64机器上,都存在时间跳跃,移动了固定原始时间。我使用替代方法(此处为currentTimeMillis)获取正确时间的方法可能存在一些缺陷。然而,测量相对时间(持续时间)的主要目的也受到负面影响。在将不同的队列与LMAX的Disruptor进行比较时,我遇到了这个问题,试图测量延迟,有时我会遇到非常负的延迟。在这些情况下,开始和结束时间戳由不同的线程创建,但延迟是在这些线程完成后计算的。我这里的代码使用nanoTime来计算时间,计算currentTimeMillis

java.sql.Timestamp 存储 NanoSeconds 的方式

java.sql.Timestamp的构造函数是这样的:publicTimestamp(longtime){super((time/1000)*1000);nanos=(int)((time%1000)*1000000);if(nanos它基本上接受以毫秒为单位的时间,然后提取最后3位数字并将其设为纳秒。所以对于1304135631421的毫秒值,我得到Timestamp.getnanos()作为421000000。这是简单的计算(在末尾添加6个零)......似乎不是最佳的。更好的方法可能是时间戳构造函数,它接受以纳秒为单位的时间,然后从中计算出纳秒值。如果运行以下程序,您将看到实际

java - 除以 1e9d 是什么意思?

这是片段:StringmyTime=someTime/1e9d+",";someTime是使用System.nanoTime()派生的。1e9d在这里做什么? 最佳答案 1e9表示10^92d表示2为双数例如系统输出1e9=>1.0E9系统输出10e9=>1.0E10另见Floating-PointLiteralsJava™教程部分。 关于java-除以1e9d是什么意思?,我们在StackOverflow上找到一个类似的问题: https://stackov

Java 正则表达式提供任何性能优势?

在Java中,当我们尝试使用正则表达式进行模式匹配时。例如获取输入字符串并使用正则表达式来确定它是否为数字。如果不是,则抛出异常。在这种情况下,据我所知,使用正则表达式可以使代码比我们获取字符串的每个字符、检查它是否为数字以及如果不是则抛出异常更简洁。但我假设正则表达式也能使流程更有效率。这是真的?关于这一点,我找不到任何证据。正则表达式如何在幕后进行匹配?它不也遍历字符串并逐个检查每个字符吗? 最佳答案 为了好玩,我运行了这个微型基准测试。最后一次运行(即JVM预热/JIT后)的结果如下(无论如何,从一次运行到另一次运行结果相当一

java - 为什么第一次调用构造函数花费的时间比其他调用多 10 倍?

classtestx{publictestx(){longstartTime=System.nanoTime();System.out.println((System.nanoTime()-startTime));}publicstaticvoidmain(Stringargs[]){newtestx();newtestx();newtestx();}}我总是得到类似于此7806660517的结果。为什么第一次调用比其他调用花费的时间多10倍? 最佳答案 因为此时JVM第一次加载了一堆类。一旦第一个System.nanoTime()