new、Class.forName、class.newInstance性能比较

今天写个个代码必须得从Class.forName加载指定类名的类,忽然想到是否性能是否会有影响呢,特地做了下测试。

1、被实例化的类

public class Foo {
      private static final int max_count = 1000;
      private static int count = 0;
      
      public void bar() throws Exception {
          // do nothing
      }
}

2、测试类

public class ClassforNameTest {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception  {
        Foo f = null;
        int count = 10000000;
        long newBegin = System.currentTimeMillis();
        for(int i=0; i<count; i++) {
            f = new Foo();
        }
        System.out.println("speed time:" + (System.currentTimeMillis() - newBegin));
        
        Class fc = null;
        long forNameBegin = System.currentTimeMillis();
        for(int i=0; i<count; i++) {
            fc = Class.forName("Foo");
        }
        System.out.println("speed time:" + (System.currentTimeMillis() - forNameBegin));
        
        
        long newInstanceBegin = System.currentTimeMillis();
        for(int i=0; i<count; i++) {
            f = (Foo)fc.newInstance();
        }
        System.out.println("speed time:" + (System.currentTimeMillis() - newInstanceBegin));
    }

}


count=1000000测试结果: 

new speed time:15
forName speed time:923
newInstance speed time:140

结论:

如果性能要求特别高的话,最好将Class.forName的结果缓存起来后再通过newInstance创建实例,避免重复加载类。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值