使用 JProfiler,我在我的 Java 代码中发现了一个我无法理解的热点。JProfiler 解释说,这种方法平均需要 150μs(没有预热的情况下为 674μs),不包括调用后代方法所需的时间。150μs 可能看起来不多,但在这个应用程序中,它加起来(并且我的用户体验过)而且看起来很多,与其他对我来说似乎比这个更复杂的方法相比。因此,这对我很重要。
private boolean assertReadAuthorizationForFields(Object entity, Object[] state,
String[] propertyNames) {
boolean changed = false;
final List<Field> fields = FieldUtil.getAppropriatePropertyFields(entity, propertyNames);
// average of 14 fields to iterate over
for (final Field field : fields) {
// manager.getAuthorization returns an enum type
// manager is a field referencing another component
if (manager.getAuthorization(READ, field).isDenied()) {
FieldUtil.resetField(field.getName(), state, propertyNames);
changed = true;
}
}
return changed;
}
我自己在不同的方向上最小化了这种方法,但它从来没有教给我太多有用的东西。我不能过分强调 JProfiler 报告的持续时间 (150μs) 仅与此方法中的代码有关,不包括执行getAuthorization
、isDenied
等所需的时间resetField
。这也是为什么我首先发布这个片段,没有太多上下文,因为问题似乎出在这段代码上,而不是它随后的后代方法调用。
也许你可以争论为什么——如果你觉得我看到了鬼魂:) 不管怎样,谢谢你的时间!