Optimization JavaAPI方法运行时

Optimization JavaAPI方法运行时,optimization,runtime,java,Optimization,Runtime,Java,有没有好的资源来获取标准API函数的运行时间?当你试图优化你的程序时,会有点困惑。我知道Java的速度并不特别快,但我似乎根本找不到这方面的太多信息 示例问题: 如果我在文件中查找某个标记,那么使用string.contains(…)扫描每一行,或者引入100行左右的行,将它们放在一个本地字符串中,然后在该块上执行contains,是不是会更快呢,可能存在基于您正在运行的JVM的各种实现。再加上JVM的JIT优化、垃圾收集和其他很多东西,我怀疑你能得到全局意义上的数字。您最多可以编写自己的基准测

有没有好的资源来获取标准API函数的运行时间?当你试图优化你的程序时,会有点困惑。我知道Java的速度并不特别快,但我似乎根本找不到这方面的太多信息

示例问题:
如果我在文件中查找某个标记,那么使用string.contains(…)扫描每一行,或者引入100行左右的行,将它们放在一个本地字符串中,然后在该块上执行contains,是不是会更快呢,可能存在基于您正在运行的JVM的各种实现。再加上JVM的JIT优化、垃圾收集和其他很多东西,我怀疑你能得到全局意义上的数字。您最多可以编写自己的基准测试

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

但除此之外,大多数情况下您正在进行过早的优化。使用探查器查看它实际上是一个瓶颈


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

没有文档,因为不同机器、不同操作系统的匹配算法会有很大差异。要获得程序的准确计时,请使用。NetBeans分析器很好


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

您正在寻找一个

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

< P>我同意使用探查器的想法-但是您可能还想考虑只使用Log4J(或者Apache Con on日志等)。获取一些关于程序性能的廉价统计数据——结果日志文件中的日志条目将被时间戳到最接近的毫秒:因为日志记录通常是调试时需要做的一件有用的事情,所以可能值得先做这件事


学习分析工具并学习如何解释生成的数据本身通常是一项非常重要的任务——值得去做,但您可能能够通过使用日志数据更快地获得大致的想法——特别是如果您将其格式化为CSV等格式,以便导入到电子表格中。

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

什么样的环境运行时间?对于您的示例问题,您可以对这两个问题进行编码并测试几次,看看哪一个更快。我已经做过很多次了,“我知道Java并不是特别快的”。我不知道你是从哪里得到这个印象的。Sun和其他人花了15年的时间研究Java,以使其尽可能快。关于速度的评论来自这样一个事实,即Java的编写似乎是为了让程序员更容易。是的,他们可以努力提高速度,但如果其主要目标是速度,他们就不会强迫它在虚拟机上运行。+1提到JIT优化-一种由HotSpot内联/优化的“自然较慢”方法可能比理论上更有效的方法快得多。由于这些优化是基于运行时配置文件进行的,而且我相信代码的局部性,因此无法确切地说“
X
Y
快,句号。”当然,你是对的——不要过早地进行优化;首先写清楚简洁的代码,如果有必要,重写以提高速度。