jdk 8 怎么和 jdk 15.1 差距这么大?
主写了两个排序方法,一个是选择排序,一个是插入排序,代码肯定是没有任何问题的
在 macOS 下的 jdk 15.1,跑出来是这样的: 
在虚拟机 ubuntu 的 openjdk 8 中,跑出来是这样的: 
为什么会这样呢?同样一份代码,在 jdk 15.1 下,插入排序的 random array 怎么比选择排序慢了这么多?
主写了两个排序方法,一个是选择排序,一个是插入排序,代码肯定是没有任何问题的
在 macOS 下的 jdk 15.1,跑出来是这样的: 
在虚拟机 ubuntu 的 openjdk 8 中,跑出来是这样的: 
为什么会这样呢?同样一份代码,在 jdk 15.1 下,插入排序的 random array 怎么比选择排序慢了这么多?
竟然跟 macOS 的 15.1 一样,插入排序慢很多

public static <E extends Comparable<E>> void sort(E[] arr){
for(int i = 0; i < arr.length; i ++){
E t = arr[i];
int j;
for(j = i; j – 1 >= 0 && t.compareTo(arr[j – 1]) < 0; j –){
arr[j] = arr[j – 1];
}
arr[j] = t;
}
}
应该不是随机数的问题,也不是 ubuntu 的问题,因为在 ubuntu 不同的 jdk,最后时间也不一样
代码: https://paste.ubuntu.com/p/NFcDMsvNdH/
这可以说是负优化吗……,是由什么引起的呢?
另外我上面的回复说的随机数种子的问题是我想错了……
比如两个算法,一个算法花的时间是 n,另一个是 10000n,他们的时间复杂度都是 O(n),但他们花费的时间相差一万倍
另外,现代计算机其实对于交换和比较的耗时其实是有差别的,另外,不同排序算法对 CPU 缓存的命中率也会影响排序的速度
我稍微看了一下你的代码,有个点注意一下,Java 数组本身就是协变的,没必要加那个协变泛型标注
不是啊,问题是为什么 jdk 11 以上,插入排序慢了一倍,而选择排序速度不变?跑了几遍都一样,这肯定跟算法和代码没关系
不同版本默认 GC 参数会有差异