当前位置: 首页 > 面试题库 >

Java反射性能

傅翰池
2023-03-14
问题内容

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


问题答案:

由于反射涉及动态解析的类型,因此无法执行某些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。



 类似资料:
  • 本小节我们来学习一个 Java 语言中较为深入的概念 —— 反射(reflection),很多小伙伴即便参与了工作,可能也极少用到 Java 反射机制,但是如果你想要开发一个 web 框架,反射是不可或缺的知识点。本小节我们将了解到 什么是反射,反射的使用场景,不得不提的 Class 类,如何通过反射访问类内部的字段、方法以及构造方法等知识点。 1. 什么是反射 Java 的反射(reflecti

  • 问题内容: 我试图使用反射从另一个类中获取方法,但是由于某种原因,它一直在给我提供这样的方法异常。这些是即时通讯使用的类: ScriptTable类: DummyScript类 问题答案: 这是你的问题: 更改为: 并查看此处以了解原因: http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getMethod%28java.l

  • 问题内容: 是否有与.NET Reflector等效的Java ? 编辑:更具体地说,反编译是我的追求。 问题答案: 我几乎不知道.NET Reflector的功能在包括Eclipse在内的几乎所有Java IDE中都可用。只需将文件添加到项目中,就可以像浏览自己的类一样浏览其类。 对于反编译器方面(与纯类浏览器相反),还有一些替代方法。JDK工具仅反编译为字节码,因此获取源代码并没有什么用(但是

  • 一、泛型和Class类 从JDK 1.5 后,Java中引入泛型机制,Class类也增加了泛型功能,从而允许使用泛型来限制Class类,例如:String.class的类型实际上是Class<String>。如果Class对应的类暂时未知,则使用Class<?>(?是通配符)。通过反射中使用泛型,可以避免使用反射生成的对象需要强制类型转换。 泛型的好处众多,最主要的一点就是避免类型转换,防止出现C

  • 一、代理模式 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象。 1、代理模式的理解 代理模式使用代理对象完成用户请求,屏蔽用户对真实对象的访问。现实世界的代理人被授权执行当事人的一些事宜,无需当事人出面,从第三方的角度看,似乎当事人并不存在,因为他只和代理人通信。而事实上代理人是要有当事人的授权,并且在核心问题上还需要请

  • 一、概述 Java反射机制定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java 反射机制的功能 1.在运行时判断任意一个对象所属的类。 2.在运行时构造任意一个类的对象。 3.在运行时判断任意一个类所具有的成员变量和方法。 4