由于 Java 反射是要解析字节码,将内存中的对象进行解析,包括了一些动态类型,而 JVM 无法对这些代码进行优化。因此,反射操作的效率要比那些非反射操作低得多!

    1. import java.lang.reflect.Method;
    2. public class Test2 {
    3. public static void main(String[] args) {
    4. try {
    5. //反射耗时
    6. Class clazz = Class.forName("Reflict.Users");
    7. Users users = (Users) clazz.newInstance();
    8. long reflectStart = System.currentTimeMillis();
    9. Method method = clazz.getMethod("setUserage", int.class);
    10. for(int i=0;i<100000000;i++){
    11. method.invoke(users,25);
    12. }
    13. long reflectEnd = System.currentTimeMillis();
    14. //非反射方式的耗时
    15. long start = System.currentTimeMillis();
    16. Users u = new Users();
    17. for(int i=0;i<100000000;i++){
    18. u.setUserage(25);
    19. }
    20. long end = System.currentTimeMillis();
    21. System.out.println("反射执行时间:"+(reflectStart-reflectEnd));
    22. System.out.println("非反射执行时间:"+(start-end));
    23. } catch (Exception e) {
    24. e.printStackTrace();
    25. }
    26. }
    27. }

    image.png