美文网首页
Java new和反射哪个效率高?

Java new和反射哪个效率高?

作者: 明散 | 来源:发表于2020-07-22 22:32 被阅读0次

主要对比三种创建对象的方法.

  1. 直接new
  2. .class
  3. Class.forName
  • 采用纳秒对比,毫秒对比结果是0.可见,创建一个对象的耗时,是纳秒级别.
  • 环境是OpenJDK Runtime Environment AdoptOpenJDK (build 14+36)

结果: 直接new最快, Class.forName次之, .class方式最慢

new nanoTime:4600
userObj1:{"User":{"id":null,"name":"null"}}
.class nanoTime:84700
userObj2:{"User":{"id":null,"name":"null"}}
Class.forName nanoTime:22200
userObj3:{"User":{"id":null,"name":"null"}}

源码如下

import java.lang.reflect.InvocationTargetException;

/**
 * 测试用User
 *
 * @author ming san
 * @since 2020-07-22 21:32:11
 */
public class User {
    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, ClassNotFoundException {
        long timeStart1 = System.nanoTime();
        User userObj1 = new User();
        System.out.println("new nanoTime:" + (System.nanoTime() - timeStart1));
        System.out.println("userObj1:" + userObj1);
        System.out.println();

        long timeStart2 = System.nanoTime();
        Class<User> userClass2 = User.class;
        User userObj2 = userClass2.getDeclaredConstructor().newInstance();
        System.out.println(".class nanoTime:" + (System.nanoTime() - timeStart2));
        System.out.println("userObj2:" + userObj2);
        System.out.println();

        long timeStart3 = System.nanoTime();
        Class<?> userClass3 = Class.forName("com.mingsan.User");
        User userObj3 = (User) userClass3.getDeclaredConstructor().newInstance();
        System.out.println("Class.forName nanoTime:" + (System.nanoTime() - timeStart3));
        System.out.println("userObj3:" + userObj3);
    }

    private Integer id;
    private String name;


    public User() {

    }

    public User(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "{\"User\":{"
                + "\"id\":"
                + id
                + ",\"name\":\""
                + name + '\"'
                + "}}";
    }
}

相关文章

网友评论

      本文标题:Java new和反射哪个效率高?

      本文链接:https://www.haomeiwen.com/subject/wkdxlktx.html