gpt4 book ai didi

java 泛型与使用 Class.forName() 动态加载类

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:54 25 4
gpt4 key购买 nike

假设我正在创建一个名为 Government 的类。政府有官员、部长、部门等成员。我为这些成员中的每一个创建了一个界面,任何特定的政府都可以根据需要定义它们。

政府类中的主要方法称为 Serve(Request req) .假设查询率非常大(每秒 1000+ 查询)。

要创建政府,我可以:
1)使用Java泛型编写Government<Class Minister, Class Officer, ...>并且任何特定的政府实现都需要在 Java 代码中创建自己的政府对象,以及一个 main()拥有可部署的 jar。

2) 有一个配置文件,指定官员、部长等的类名,并且无论何时 Serve()被调用,它使用 Class.forName()Class.newInstance()创建类的对象。任何新政府只需要为其成员编写类和配置文件。有一个单main()对于所有政府。

从纯粹的性能角度来看 - 哪个更好,为什么?我主要担心的是:

a) 做 forName()每次都执行昂贵的搜索?假设有一个非常大的类。

b) 我们是否错过了可能在情况 1 中执行但在情况 2 中对动态类执行的编译器优化?

最佳答案

只要您重用您的政府对象,在运行时就没有区别。区别仅在于对象创建时。

1 和 2 在概念上有所不同 - 1 是硬连线的,而 2 是动态的(你甚至可以使用 DI 约束器,如 spring、guice 或 pico - 基本上你建议自己编写)

至于 forName() 性能 - 它取决于类加载器(以及容器)。他们中的大多数会缓存名称解析结果,在 map 中查找 - 但我不能代表所有

至于优化 - 有编译器优化,还有来自 JIT 编译器的积极的运行时优化 - 它们更重要。

关于java 泛型与使用 Class.forName() 动态加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8520651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com