java反射使用及性能比较
生活随笔
收集整理的這篇文章主要介紹了
java反射使用及性能比较
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
環境準備
package com.lilei.pack09;public class Logger {public void show(){System.out.println("hello world");}public int cal(int a,int b){return a + b;}public String multi(String... args){return args.length+";";}}?
使用反射
package com.lilei.pack09;import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;public class app1 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {Class c = Class.forName("com.lilei.pack09.Logger");Method[] ms = c.getMethods();Method m_show = c.getMethod("show", null);m_show.invoke(new Logger(), null);Method m_cal = c.getMethod("cal", new Class[]{int.class,int.class});Object result = m_cal.invoke(new Logger(), 233,2233);new Logger().multi("v","dd","ds");System.out.println(result);Method m_multi = c.getMethod("multi", new Class[]{String[].class});result = m_multi.invoke(new Logger(), new Object[]{new String[]{"v","dd","ds"}});System.out.println(result);}}?
性能比較
常規創建對象調用方法和通過反射進行調用方法
package com.lilei.pack09;import java.util.Date;public class app2 {public static void main(String[] args) {Logger logger = new Logger();int result = 0;System.out.println(new Date());for (int i = 0; i < 2000000000; i++){result += logger.cal(i,i);}System.out.println(result);System.out.println(new Date());}}消耗時間:
package com.lilei.pack09;import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Date;public class app3 {public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {Logger logger = new Logger();Method m = logger.getClass().getMethod("cal", new Class[]{int.class,int.class});int result = 0;System.out.println(new Date());for (int i = 0; i < 2000000000; i++){Integer in = (Integer)m.invoke(logger, i,i);result += in.intValue();}System.out.println(result);System.out.println(new Date());}}消耗時間:
?
通過使用反射消耗的時間是通過對象調用方法的40-50倍
轉載于:https://www.cnblogs.com/lilei2blog/p/8352964.html
總結
以上是生活随笔為你收集整理的java反射使用及性能比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断一个数是不是回文数
- 下一篇: 小白的Python之路 day5 con