将大约 4000 个对象序列化为 JSON 大约需要 4 秒(准确地说是 3820 毫秒)。在分析为什么需要这么长时间时,我发现大约 40% 的时间 (1535ms) 花费在
play.classloading.enhancers.PropertiesEnhancer$FieldAccessor.invokeReadProperty(Object, String, String, String)
通过反射获取“getter”方法大约需要1152ms。
您知道为什么需要这么长时间以及如何解决或优化它吗?
最佳答案
反射并不是一个廉价的操作。您提到的方法使情况变得更糟:首先尝试通过反射获取方法,然后可能捕获异常并尝试获取字段。并且该方法不会尝试缓存结果。如果经常调用此函数,那么它会占用大量 CPU 时间也就不足为奇了。
我不知道是否可以在不更改库的情况下解决这个问题。我所拥有的唯一上下文是您提供的单一方法引用。这还不够。
关于java - 分析显示 PropertiesEnhancer 中的执行时间较长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18629246/