java容易导致性能瓶颈点

1.不要使用string的split

不要使用string的split,可以看看内部的2B实现:

public String[] split(String regex, int limit) {
	return Pattern.compile(regex).split(this, limit);
}


每次会造成正则表达式的重新编译, 这是很消耗性能/内存的过程。 自己使用java的正则接口(如果表达式非常复杂, 我不建议使用java的正则接口,建议采用oro库)。 讨论帖子:http://www.iteye.com/topic/626801?page=2

2.使用spring的BeanWrapperImpl做bean组装请提前做好类型转换

spring BeanWrapperImpl 实现的类型转换有性能问题,刚才我测试来一把
使用spring BeanWrapperImpl进行类型转换的耗时:
4.687(ms)
3.508(ms)
3.261(ms)
3.177(ms)
7.526(ms)
3.393(ms)

先自己做好类型转换再调用setPropertyValue()的耗时:
0.603(ms)
0.699(ms)
0.559(ms)
0.591(ms)
0.579(ms)
0.532(ms)

可以看宝宝webx3中AbstractValueParser.setProperties()的实现:
BeanWrapper bean = new BeanWrapperImpl(object);
requestContext.getPropertyEditorRegistrar().registerCustomEditors(bean);

for (String key : keySet()) {
String propertyName = StringUtil.toCamelCase(key);

if (bean.isWritableProperty(propertyName)) {
PropertyDescriptor pd = bean.getPropertyDescriptor(propertyName);
MethodParameter mp = BeanUtils.getWriteMethodParameter(pd);
Object value = getObjectOfType(key, pd.getPropertyType(), mp, null);

bean.setPropertyValue(propertyName, value);
} else {
getLogger().debug("No writable property \"{}\" found in type {}", propertyName,
object.getClass().getName());
}
}

猜你喜欢

转载自san-yun.iteye.com/blog/1689261
今日推荐