java几次_为什么我的算法在执行好几次后变得更快? (JAVA)

我有一个Sudoku解决算法,我的目标是尽可能快地做.要测试这个算法,我运行它多次并计算平均值.注意到一些奇怪的数字后,我决定打印所有的时间,得到这个结果:

Execution Time : 4.257746 ms (#1)

Execution Time : 7.610686 ms (#2)

Execution Time : 6.277609 ms (#3)

Execution Time : 7.595707 ms (#4)

Execution Time : 7.610131 ms (#5)

Execution Time : 5.011104 ms (#6)

Execution Time : 3.970937 ms (#7)

Execution Time : 3.923783 ms (#8)

Execution Time : 4.070238 ms (#9)

Execution Time : 4.765347 ms (#10)

Execution Time : 0.818264 ms (#11)

Execution Time : 0.620216 ms (#12)

Execution Time : 0.679021 ms (#13)

Execution Time : 0.643516 ms (#14)

Execution Time : 0.718408 ms (#15)

Execution Time : 0.744481 ms (#16)

Execution Time : 0.760569 ms (#17)

Execution Time : 0.80384 ms (#18)

Execution Time : 0.75946 ms (#19)

Execution Time : 0.802176 ms (#20)

Execution Time : 66.032508 ms : average = 3.3016254000000003

经过10到15次执行(随机变化),算法的性能大幅提高.如果我跑几百次,最终将稳定在0.3ms左右.请注意,我在JIT的这个循环之前运行一次算法来做它的事情.

此外,如果我让线程休眠2秒钟,然后再运行我的循环,我的所有时间都在1ms(/ – 0.2).

此外,如果我在循环之前解决了一个通用的Sudoku(一个1-9对角线的网格)大约500次,我的所有时间都在0.3ms左右(/ – 0.02).

每个解决都是一样的.所有值都被重置.

所以我的问题是多重的:

– 为什么每个解决时间改善后连续解决?

– 为什么10-15之后解决时间突然下降?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值