如何比较"相同功能不同代码"的性能哪个好,测试工具有什么

想要一种测试工具,去体验不同排序方法对内存和时间的使用,并体会出最好的排序方法,而且这种测试工具最好不要局限于比较排序,最好是java SE的项目都可以比较的那种.
另附我用java写的排序方法,如果方便,想请教哪个更好,如何分析:

private static void sortThird(int[] num) {
    for(int i=1;i<num.length;i++) {
        int j=i;
        while(true){
            if(j>0&&num[j]<num[j-1]) {
                //change
                num[j] = num[j] ^ num[j-1];
                num[j-1] = num[j] ^ num[j-1];
                num[j] = num[j] ^ num[j-1];
                j--;
            }else {
                break;
            }
        }
    }
    System.out.println("sortThird:"+Arrays.toString(num));
}

private static void sortSec(int[] num) {
    for(int i=0;i<num.length;i++) {
        for(int j=0;j<i;j++) {
            if(num[i]<num[j]) {
                //change
                num[i] = num[i] ^ num[j];
                num[j] = num[i] ^ num[j];
                num[i] = num[i] ^ num[j];
            }
        }
    }
    System.out.println("sortSecond:"+Arrays.toString(num));
}

private static void sortFir(int[] num) {
    for (int j = 0; j < num.length - 1; j++) {
        for (int i = 0; i < num.length-1; i++) {
            if (num[i] > num[i + 1]) {
                num[i] = num[i] ^ num[i + 1];
                num[i + 1] = num[i] ^ num[i + 1];
                num[i] = num[i] ^ num[i + 1];
            }
        }
    }
    System.out.println("sort First:"+Arrays.toString(num));
}

看完你的问题,感觉代码也是相同的,只是想测试函数顺序不同对功能有无影响?
如果以编程的角度看你放的那段代码是没有影响的。如果更复杂的代码,就要考虑结构的优化。。

感觉差不多,数据少时都一样

想这种测试循环的改造一下代码就OK了
private static void sortFir(int[] num) {
Long begain = System.currentTimeMillis();
Long end = 0;
for (int j = 0; j < num.length - 1; j++) {
for (int i = 0; i < num.length-1; i++) {
if (num[i] > num[i + 1]) {
num[i] = num[i] ^ num[i + 1];
num[i + 1] = num[i] ^ num[i + 1];
num[i] = num[i] ^ num[i + 1];
}
}
}
end= System.currentTimeMillis() - begain;
System.out.println(end)
System.out.println("sort First:"+Arrays.toString(num));
}

这个问题可以类比算法性能的比较。
算法的指标有:运行时间;内存消耗。
考虑实际情况,可能会用“空间换时间”或者用“时间换空间”。
对于题主给出的几个算法,它们都是异或运算,没有new 对象,不会开辟新的堆内存空间,它们的比较是时间的比较。
比较时间,可以看它们执行的纳秒值 long time = System.nanoTime();
图片说明

对于内存的消耗,可以用jvisualvm.exe来查看它们运行时的情况,这个软件在%JAVA_HOME%\jdk1.8.0_131\bin下。
简单的,可以看看它们运行期间的垃圾回收状况。

稍微了解一点算法的应该都知道,所谓最佳都是在一定条件范围内的,不同数据量,不同环境造成的结果也不会相同

所以"最优"都是在数据量、环境等都能确定下来的情况下产生的