首先,我必须承认这些是非常基础和原始的问题......我想用 Java 演示用于排序和搜索的不同算法,并为运行时获取值。有些问题我无法解决:
有 Hotspot 编译 - 这是我需要停用的运行时优化(我猜)。
如何获取运行时的时间值(秒)?在执行前启动计时器并在执行后停止它……似乎有点原始。计时器对象本身会消耗运行时间……我需要避免这种情况。
Java API 中有什么可以用来解决这些问题的吗?
谢谢, 克劳斯
最佳答案
您可以在命令行上使用 -Xint
禁用 HotSpot,从而使性能降低一个数量级。但是,您为什么不想衡量真实世界的表现呢?编译时,不同的事情可能会成为瓶颈。
通常用于微基准测试:
- 使用
System.nanoTime
在开始和结束时获取时间测量值 - 跑一段合理的时间
- 多次测量(有一些“热身”)
- 不要交错测量不同算法
- 不要在测量段中做任何 I/O
- 使用结果(HotSpot 可以完全优化掉琐碎的操作)
- 在现实世界的情况下(或尽可能在阴凉处)做这件事
- 记住双核是常态,更多核将成为常态
关于Java 任务运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/819931/