代码之家  ›  专栏  ›  技术社区  ›  Mike

Java API方法运行时间

  •  3
  • Mike  · 技术社区  · 15 年前

    有没有好的资源来获取标准API函数的运行时间?当你试图优化你的程序时,它有些混乱。我知道Java不是特别快,但我似乎找不到关于这方面的很多信息。

    示例问题: 如果我在一个文件中寻找某个标记,那么使用string.contains(…)扫描每一行,或者引入100行左右的行,将它们放入它们在该块上执行包含的本地字符串,会更快吗?

    6 回复  |  直到 15 年前
        1
  •  5
  •   Uri    15 年前

    afaik,没有API方法的标准基准,事实上,可能有基于您正在运行的JVM的各种实现。再加上JVM的JIT优化、垃圾收集和许多其他功能,我怀疑您是否能够获得具有全局意义的数字。你能做的最多的就是写你自己的基准。

    有些方法在其javadocs中指定了操作的计算复杂性。其他一些方法描述了其他性能问题。确保你意识到他们并注意他们。

    但除此之外,最有可能的情况是您正在进行过早的优化。使用探查器可以看到它实际上是一个瓶颈。

    例如,在您的情况下,从文件读取的成本,将字符串放入大缓冲区的成本,等等。我不确定您是否真的可以通过在字符串级别读取来优化。如果这真的是任务关键型的,那么你可以一个字符一个字符地读取并实现一个智能匹配算法,而不需要创建字符串,这可能稍微快一点。

        2
  •  3
  •   OscarRyz    15 年前

    你在找一个 profiler

        3
  •  1
  •   mdma    15 年前

    没有文档,因为不同的机器、操作系统和操作系统会有很大的不同。要获得程序的准确时间,请使用 profiler . NetBeans分析器很好。

    至于找出哪一个最快,没有比这两个代码更好的选择。或者,您可以编写最简单的替代方案,当它工作时,您可能会发现它的速度足以满足您的需要,而不必编写更复杂的实现。

        4
  •  1
  •   Jim Barrows    15 年前

    如果我正确理解你的问题,你的问题是,从某个地方读一行还是从记忆中读一行更好。 将文本加载到内存中进行扫描,然后从I/O流(尤其是磁盘)中读取它们,总是会更快。读取的速度与Java无关,但是源可以快速地将数据获取到程序。

        5
  •  1
  •   monojohnny    15 年前

    我同意使用profiler的想法-但您可能还想考虑使用log4j(或apache commons logging等)来获取一些关于程序性能的廉价统计信息-因为结果日志文件中的日志条目将被时间戳到最接近的毫秒:因为日志记录通常是调试时要做的一件有用的事情,这可能值得先做。

    学习分析工具和学习如何解释结果数据本身通常是一项非常重要的任务-值得做,但是您可能只需要使用日志数据就能更快地得到一个大致的想法-特别是如果您将其格式化为csv等格式,以便导入到电子表格中。

        6
  •  1
  •   irreputable    15 年前

    如果我们忽略了磁盘IO时间,只考虑在代码中花费的CPU时间,那么第二个选择将比第一个慢得多。