首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[出于性能原因] Class.getConstructor的替代方案

[出于性能原因] Class.getConstructor的替代方案
EN

Stack Overflow用户
提问于 2021-02-03 00:24:42
回答 1查看 99关注 0票数 2

我正在尝试动态加载10,000个类,并有如下代码:

代码语言:javascript
复制
Class<?> c = getClass().getClassLoader().loadClass(className);
Constructor<?> constr = c.getConstructor(String.class);
constr.newInstance(myString);

在分析方面,我注意到大部分时间都花在getConstructor调用上,这似乎平均占用了15 is,显然乘以10k之和。

有关于交替编写这个以加快java反射的建议吗?

附注:不幸的是,这些类必须动态加载(否则我根本不会使用反射)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-03 01:24:22

据推测,它正在初始化所需费用的类。可以通过将.loadClass(className)更改为.loadClass(className, true)来检查这一点。如果它们是生成的类,那么也许您可以更改一些东西,例如,用公共代码替换静态字段上的大型文字数组,以便从字符串文本中提取数据。

编辑:刚刚检查,该标志正在解析(链接)。Class.forName(className, true, loader)初始化?乱七八糟。

如果您想尝试方法句柄,代码将按照以下几个方面来查看:

代码语言:javascript
复制
MethodType methodType = MethodType.methodType(
    Void.TYPE, String.class
);
MethodHandles.Lookup lookup = MethodHandles.publicLookup();

... for each class ...
    lookup.findConstructor(c, methodType).invokeExact(myString);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66019549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档