是否有足够的资源来获取标准API函数的运行时间?在尝试优化程序时,这有点令人困惑。我知道Java并不是特别快速,但我似乎根本找不到这方面的信息。
示例问题: 如果我在文件中查找某个令牌,那么使用string.contains(...)扫描每一行会更快或者说带100个左右的行将它们放到一个本地字符串中,它们执行包含在该块上。 / p>
答案 0 :(得分:5)
AFAIK,API方法没有标准基准,事实上,可能存在基于您正在运行的JVM的各种实现。结合JVM的JIT优化,垃圾收集和许多其他事情,我怀疑你能得到全球有意义的数字。你能做的最多就是编写自己的基准测试。
某些方法指定了JavaDocs中操作的计算复杂性。其他一些方法描述了其他性能问题。确保你了解它们并注意它们。
但除此之外,大多数机会是您正在进行过早的优化。使用分析器看它实际上是一个瓶颈。
例如,在您的情况下,将会有从文件中读取的成本,将字符串放在大缓冲区中的成本等。我不确定您是否可以通过读取字符串级别来实现优化。如果这真的是关键任务,你可以逐个字符地阅读并实现一个智能匹配算法,而无需创建字符串,这可能会稍快一点。
答案 1 :(得分:3)
您正在寻找profiler
答案 2 :(得分:1)
没有文档,因为它会因机器,操作系统和操作系统而有很大差异。要为您的计划获得准确的时间安排,请使用profiler。 NetBeans探查器很好。
至于找出哪个是最快的,那么对两者进行编码都没有更好的选择。或者,您可以编写最简单的替代方案,当它工作时,您可能会发现它足够快,可以满足您的需求,而不需要为更复杂的实现编写代码。
答案 3 :(得分:1)
如果我正确地理解了你的问题,你会问你是否最好从某处读取一行,或者从内存中读取一行。 将文本加载到内存中进行扫描然后从I / O流中读取它们总是更快,特别是从磁盘中读取它们。读取速度与Java无关,但源可以多快地将数据传输到程序中。
答案 4 :(得分:1)
我同意有关使用Profiler的想法 - 但您可能还想考虑使用log4j(或Apache Commons Logging等)获取有关程序性能的一些廉价统计信息 - 因为生成的日志文件中的日志条目将获得时间戳到最近的毫秒:由于日志记录在调试时通常是一件很有用的事情,所以首先可能值得这样做。
学习分析工具并学习如何解释结果数据本身通常是一项非常重要的任务 - 值得做,但是你可能只需使用记录数据就能更快地得到一个粗略的想法 - 特别是如果你格式化它作为CSV等,您可以导入电子表格。
答案 5 :(得分:1)
如果我们忽略了磁盘IO时间,只考虑代码中花费的CPU时间,那么第二选择将比第一选择慢得多。