使用接口和反射API在运行时创建实例是昂贵的选择

时间:2018-03-22 15:39:01

标签: java performance reflection interface

我的情况是需要从表中动态选取实现接口的类。将在表中配置此类的绝对路径。将从表中选择类名,然后使用反射API创建并执行该类的实例。

我假设当多个线程访问此程序时会创建许多实例,这可能会占用大量内存并且可能会对性能产生影响。我在这个假设中是对的吗?有没有办法在这里处理我的情况?

以下是代码段:

Class<?> c = Class.forName(dynamicClass);            
ServiceValidatorInterface inst = (ServiceValidatorInterface) c.newInstance();
inst.validateService(serviceDetails);

1 个答案:

答案 0 :(得分:1)

无论你如何创建实例,创建实例都需要记忆,因此这与问题无关。

至于性能影响,通过newInstance()创建实例当然与直接调用构造函数不同,但它真的会对你产生影响吗?此外,如果您要反复创建同一个类的实例,您可以将它们集中在一起,这样它们只会被创建一次。您只需要确保这些类是无状态的并且可以共享。

不要过于仓促地担心性能影响。它是2018年,我们拥有有史以来最强大的计算机,但人们却担心(通常没有理由)提前做出无关紧要的事情。知道某些东西是否具有可接受性能的唯一方法是来衡量它,除非你先编写代码,否则你不能这样做。