На первой итерации вы также измеряете время JIT (или, по крайней мере, некоторое время JIT - HotSpot будет постепенно оптимизироваться). Сначала запустите его несколько раз, и , затем начните измерение. Я подозреваю, что вы видите преимущества HotSpot с течением времени - более ранние тесты замедляются как из-за времени, затрачиваемого на JIT , так и , из-за того, что он не работает как оптимальный код. (Сравните это с .NET, где JIT запускается только один раз - прогрессивная оптимизация отсутствует.)
Если вы можете , сначала выделите всю память - и убедитесь, что ничто не является мусором до конца. В противном случае вы включаете распределение и GC в ваше время.
Вам также следует подумать о том, чтобы попытаться взять больше образцов, при этом n
повысится еще на порядок, чтобы лучше понять, как увеличивается время. (Я не посмотрел на то, что вы сделали достаточно тщательно, чтобы понять, действительно ли это должно быть O (n 2 ).)