谨慎使用java变长数据结构

这个问题遇到不少次了,还是写下来敬告做核心模块开发的朋友。

 

java中像HashMap,StringBuffer,ArrayList这类数据结构,再给开发人员带来极大方便性的同时,实际上还是存在着使用上的陷阱的,主要主意事项在于内存的使用上。

 

问题描述:

这类变长数据结构的缺省的实例化方法,都会分配一个缺省大小的空间,比如HashMap为16, ArrayList为10,等等。如果不断向其中增加内容,这类数据结构会自动延展,以适应需要,但自动延展的问题是空间的无畏消耗,比如会重新申请一个更大的空间,然后将数据从旧的空间copy到新的空间,然后扔掉旧空间。在数据量小的情况下,内存使用率问题并不严重,但是如果数据很大,需要不断的自动延展,那heap空间浪费也是惊人的。

 

在使用频率不是很高的非核心模块中使用这种变长数据结构,不会有很严重的后果,但是,如果在使用频率非常高的核心模块中使用,那可要小心加小心了,使用不当会造成非常高的内存使用率。

 

解决方法:

1. 就是尽量不使用这类变长数据结构,比如根据需求自行设计数据结构。不能闲麻烦,拿来就用的东西总是要付出代价的。

2. 如果非要使用,那唯一的解决之道就是尽量事先评估需要的容量,然后按评估容量进行初始化,尽量避免自动延展。说白了,就是尽可能不要使用无参数的构造方法。:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值