效能對比分析(普通方法/反射/反射關閉檢測)
阿新 • • 發佈:2020-07-17
效能對比分析(普通方法/反射/反射關閉檢測)
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; //分析效能問題 public class Test10 { //普通方式呼叫 public static void test01(){ User user = new User(); long startTime = System.currentTimeMillis(); for (int i = 0; i < 1000000000; i++) { user.getName(); } long endTime = System.currentTimeMillis(); System.out.println("普通方法執行10億次:"+(endTime-startTime)+"ms"); //3ms } //反射方式呼叫 public static void test02() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { User user = new User(); Class c1 = user.getClass(); Method getName = c1.getDeclaredMethod("getName", null); long startTime = System.currentTimeMillis(); for (int i = 0; i < 1000000000; i++) { getName.invoke(user,null); } long endTime = System.currentTimeMillis(); System.out.println("反射方法執行10億次:"+(endTime-startTime)+"ms"); //3029ms } //反射方式呼叫 關閉檢測 public static void test03() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { User user = new User(); Class c1 = user.getClass(); Method getName = c1.getDeclaredMethod("getName", null); getName.setAccessible(true); long startTime = System.currentTimeMillis(); for (int i = 0; i < 1000000000; i++) { getName.invoke(user,null); } long endTime = System.currentTimeMillis(); System.out.println("關閉檢測執行10億次:"+(endTime-startTime)+"ms"); //1389ms } public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { test01(); test02(); test03(); } }