项目中List的返回值

最近公司一个已经稳定运行了1年的web系统出现了性能问题,响应速度非常慢,系统是不断注册新的模块的,每次增加新模块都会带来一定负载,虽然很快就断定是由于大量模块的配置文件加载与初始数据缓存本身占用了大量内容,导致留给用户操作内存空间小造成,最好的办法就是卸载无用模块和清理缓存数据,但领导还是坚持要求检查代码并消除浪费内存的低效代码,系统比较大,这件事做起来可不容易,呵呵…
在检查的时候,发现方法中对无数据集合类型的返回有2种方式,Null和new List,系统是由很多人开发的,根据代码上看很明显没有对这些细节形成统一的规范,不过也能理解…
随便找人问了问,然后告诉他们以后规范方面尽量统一,至于上面的问题返回null还是创建一个空内容数组,由于系统刚出现内存问题,几乎统一了意见,用null吧…
真是这样吗?创建新对象返回时为了避免客户端代码的空值验证,返回null值是为了减少开销,视乎都有道理。其实个人觉得不应该返回空,当然,这里暂时不考虑业务需要的情况。但内存开销怎么办?无数据集合基本上是不变的,开销应该是很低的,不过还是有两全其美的办法,不知道大家对Collections工具类的empty系列静态方法用的多不多,这些方法返回一个无内容集合,并且都是基于同一个对象实例,这样,就可以避免null值的验证和那一点开销了,建议大家大量使用


举例:

public List returnArray2(Object data){
if(data == null){
return Collections.emptyList();
}
return (List) data;
}


当然还有Collections.emptyMap()、Collections.emptySet(),原理是一样的
另外,也可以选择Collections的静态变量进行返回,其实上述方法中返回的就是下面的Collections中定义的静态变量:
public static final List EMPTY_LIST = new EmptyList();
public static final Set EMPTY_SET = new EmptySet();
public static final Map EMPTY_MAP = new EmptyMap();

在jdk1.5之前的版本使用只能使用静态变量的方式访问,具体可以见jdk源码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值