java - 使用接口(interface)和反射 API 在运行时创建实例是 coSTLy 选项

标签 java performance reflection interface

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

我假设当多个线程访问该程序时会创建许多实例,这可能会消耗大量内存,并且可能会对性能产生影响。我的这个假设正确吗?有什么办法可以解决我这里的情况吗?

以下是代码片段:

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

最佳答案

无论您如何创建实例,创建实例都会占用内存,因此这与问题无关。

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

不要太急于担心性能影响。现在是 2018 年,我们拥有有史以来最强大的计算机,但人们却提前担心(通常没有理由)一些无关紧要的事情。了解某些东西是否具有可接受的性能的唯一方法是对其进行测量,除非您先编写代码,否则无法做到这一点。

关于java - 使用接口(interface)和反射 API 在运行时创建实例是 coSTLy 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49432779/

相关文章:

java - 禁用某些 Android Studio 编译错误

go - 什么时候reflect type.Size()返回0?

linux - Oracle Linux (RHEL) 6.6 性能非常糟糕 - 发生了什么事?

java - 用于命名要通过反射读取的类的注释

java - 如何将 HSSFWorkbook 对象转换为 XSSFWorkbook?

firefox - 带有socks v5代理的java runtime 6 - 可能吗?

java - 从 .java 文件创建 .class 文件 - J2ME

java - 存储大量套接字的最佳做法是什么?

javascript - 禁用浏览器页面的特定事件

c++ - 对于 C++ Vector3 实用程序类实现,数组是否比结构和类快?