私は自分のシステムであなたのコードを実行しました。それらの間に実質的な違いはありません。どちらも約 30 ミリ秒で記録されます。私のテストはOpenJDK 7です。
確認するために、Caliper でも実行し、より大きな配列を使用して実際のコピー パフォーマンスを強調しました。
public class Performance extends SimpleBenchmark {
final int[] source = new int[1000];
public int timeClone(int reps) {
int sum = 0;
for (int i = reps; i > 0; i--)
sum += source.clone().length;
return sum;
}
public int timeCopyOf(int reps) {
int sum = 0;
for (int i = reps; i > 0; i--)
sum += Arrays.copyOf(source,source.length).length;
return sum;
}
public static void main(String... args) {
Runner.main(Performance.class, args);
}
}
結果:
0% Scenario{vm=java, trial=0, benchmark=Clone} 2141.70 ns; σ=5416.80 ns @ 10 trials
50% Scenario{vm=java, trial=0, benchmark=CopyOf} 2168.38 ns; σ=1545.85 ns @ 10 trials
benchmark us linear runtime
Clone 2.14 =============================
CopyOf 2.17 ==============================
vm: java
trial: 0
リクエストごとに、配列サイズが 10 の場合は次のようになります。
0% Scenario{vm=java, trial=0, benchmark=Clone} 30.07 ns; σ=2.12 ns @ 10 trials
50% Scenario{vm=java, trial=0, benchmark=CopyOf} 29.34 ns; σ=161.38 ns @ 10 trials
benchmark ns linear runtime
Clone 30.1 ==============================
CopyOf 29.3 =============================