比較我想比較這兩種方法來實現枚舉值(有和沒有反射)。枚舉值()方法和class.getEnumConstants()
所以這是我的測試類:
public class ReflectionOnEnumsTests2 {
enum TestEnum { ONE, TWO, THREE; }
public static void main(String[] args) {
long n = 600_000_000;
int stub;
//test without Reflection
long timeStartWithoutReflection = System.currentTimeMillis();
for (int i = 0; i < n; i++){
TestEnum[] values = TestEnum.values();
stub = values.length;
}
System.out.println("Time consuming with reflection: " + (System.currentTimeMillis() - timeStartWithoutReflection));
//test Reflection
long timeStartWithReflection = System.currentTimeMillis();
for (int i = 0; i < n; i++){
TestEnum[] values = TestEnum.class.getEnumConstants();
stub = values.length;
}
System.out.println("Time consuming with reflection: " + (System.currentTimeMillis() - timeStartWithReflection));
}
}
我感到困惑的測試結果。大致相同的時間消耗。我預計class.getEnumConstants會比values()方法慢得多。
結果:
時間與反思消費:7483
JDK版本: 1.8.0_60
問題:6050
時間與反思消費
那麼爲什麼會出現性能沒有差別?
你的問題到底是什麼? – Jan
'Class'緩存enum常量,因此'getEnumConstants()'非常快(用於重複調用) – ZhongYu
@Jan爲什麼性能沒有差別? –