San*_*gen 6 java reflection performance jprofiler
使用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;
}
Run Code Online (Sandbox Code Playgroud)
我为自己最小化了这个方法在不同的方向,但它从来没有教我很多有用的.我不能强调足够了JProfiler的报告的持续时间(150μs),仅为在此方法的代码,并且不包括需要执行的时间getAuthorization
,isDenied
,resetField
并且这样的.这也是为什么我开始只是发布这个片段,没有太多的上下文,因为问题似乎是这个代码,而不是它后续的后代方法调用.
也许你可以争论为什么 - 如果你觉得我看到鬼魂:)无论如何,谢谢你的时间!
我建议您自己为该方法计时,因为探查器并不总是给出准确的计时。
仅使用此代码创建一个微基准测试,并为其计时至少 2 秒。要计算方法调用产生的差异有多大,请将它们注释掉并对它们返回的值进行硬编码。
归档时间: |
|
查看次数: |
336 次 |
最近记录: |