Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反射还是运行时类声明?_Java_Performance_Reflection - Fatal编程技术网

Java 反射还是运行时类声明?

Java 反射还是运行时类声明?,java,performance,reflection,Java,Performance,Reflection,我有一个简单的问题 我们正在开发一个简单的应用服务器(如),该服务器在运行时接受客户端业务,而无需重新启动服务器 当用户实现其业务并将其部署到服务器时,服务器只需找到归档描述符并加载模块,就可以正常工作 有些操作需要进行大量的反射调用,对于每个调用,它们都会一次又一次地调用。例如,有一个方法,它接受任何对象,然后搜索某个由注释签名的字段,并对其进行处理,因此,如果我们对同一个对象调用此方法1000次,这将反映1000次 我的问题是,它有效吗?我的意思是它不消耗CPU吗?!我认为唯一可能的解决方案

我有一个简单的问题

我们正在开发一个简单的应用服务器(如),该服务器在运行时接受客户端业务,而无需重新启动服务器

当用户实现其业务并将其部署到服务器时,服务器只需找到归档描述符并加载模块,就可以正常工作

有些操作需要进行大量的反射调用,对于每个调用,它们都会一次又一次地调用。例如,有一个方法,它接受任何对象,然后搜索某个由注释签名的字段,并对其进行处理,因此,如果我们对同一个对象调用此方法1000次,这将反映1000次

我的问题是,它有效吗?我的意思是它不消耗CPU吗?!我认为唯一可能的解决方案是创建一个类并为每个对象(可能是包装器)编译它,然后该方法将只找到包装器类。但我知道这可能会使系统变得复杂,难以调试

目前的解决方案是可行的,但我认为一项工作做1000次是不符合逻辑的,即使它简单易行


感谢advanced。

在运行时使用反射动态加载类本身并不是一个坏选择。根据您的描述,您应该提供一个可扩展的框架,允许您的客户机进行实现,并在此基础上运行他们的业务逻辑,而不是一些隐式的运行时带注释的魔术

一个很好的现实例子就是

例如,有一个方法接受任何对象,然后进行搜索 对于某个字段,witch已通过注释签名并执行一些操作 用它做生意,所以如果我们用同样的方法调用这个方法1000次 对象,这将反射1000次

在这种情况下,我建议您使用缓存。反射完成后,您将知道类名和字段名。使用
Class
类型键和
方法作为值将它们存储在
HashMap
中。 下次调用“方法”时,请先检查缓存