Java反射性能

dmanxiii;

使用反射而不是调用类构造函数创建对象是否会导致明显的性能差异?

尤瓦尔·亚当(Yuval Adam):

是的,一点没错。通过反射查找课程,从数量上讲,更昂贵。

引用Java的反射文档

由于反射涉及动态解析的类型,因此无法执行某些Java虚拟机优化。因此,反射操作的性能要比非反射操作慢,因此应避免在对性能敏感的应用程序中经常调用的代码段中。

这是我在运行Sun JRE 6u10的计算机上在5分钟内破解的一个简单测试:

public class Main {

    public static void main(String[] args) throws Exception
    {
        doRegular();
        doReflection();
    }

    public static void doRegular() throws Exception
    {
        long start = System.currentTimeMillis();
        for (int i=0; i<1000000; i++)
        {
            A a = new A();
            a.doSomeThing();
        }
        System.out.println(System.currentTimeMillis() - start);
    }

    public static void doReflection() throws Exception
    {
        long start = System.currentTimeMillis();
        for (int i=0; i<1000000; i++)
        {
            A a = (A) Class.forName("misc.A").newInstance();
            a.doSomeThing();
        }
        System.out.println(System.currentTimeMillis() - start);
    }
}

结果如下:

35 // no reflection
465 // using reflection

请记住,查找和实例化是一起完成的,在某些情况下,可以重构查找,但这只是一个基本示例。

即使您实例化了,您仍然会受到性能影响:

30 // no reflection
47 // reflection using one lookup, only instantiating

再次,YMMV。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章