首页 >Java >java教程 >反射对 Java 性能有多大影响?

反射对 Java 性能有多大影响?

Patricia Arquette
Patricia Arquette原创
2024-12-05 04:19:14422浏览

How Much Does Reflection Impact Java Performance?

反射会影响 Java 性能吗?

使用反射创建对象,而不是直接调用类构造函数,无疑会带来严重的性能损失。反射操作需要动态类型解析,这阻碍了 Java 虚拟机优化。

Java 关于反射的文档承认了这种性能差异:“因为反射涉及动态解析的类型,所以无法执行某些 Java 虚拟机优化...反射操作的性能比非反射操作的性能要慢。”

一个简单的测试揭示了明显的问题差异:

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);
    }
}

结果:

  • 无反射:35ms
  • 有反射:465ms

请注意,此测试包括查找和实例化,但甚至包括隔离实例化会导致惩罚:

  • 无反射:30ms
  • 有反射(一次查找,仅实例化):47ms

因此,虽然性能命中率可能会根据具体上下文而有所不同,但在使用反射时仍然很重要。

以上是反射对 Java 性能有多大影响?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn