- 浏览: 43847 次
- 性别:
- 来自: 深圳
文章分类
最新评论
我们常用Collection中的Map做Cache,但是我们经常会遗忘设置初始容量。
初始容量的影响有多大?拿LinkedHashMap来说,初始容量如果不设置默认是16,超过16×LOAD_FACTOR,会resize(2 * table.length),扩大2倍:采用 Entry[] newTable = new Entry[newCapacity]; transfer(newTable),即整个数组Copy, 那么对于一个需要做大容量CACHE来说,从16变成一个很大的数量,需要做多少次数组复制可想而知。如果初始容量就设置很大,自然会减少resize, 不过可能会担心,初始容量设置很大时,没有Cache内容仍然会占用过大体积。其实可以参考以下表格简单计算下, 初始时还没有cache内容, 每个对象仅仅是4字节引用而已。
不仅是map, 还有stringBuffer等,都有容量resize的过程,如果数据量很大,就不能忽视初始容量可以考虑设置下,否则不仅有频繁的resize还容易浪费容量。
初始容量的影响有多大?拿LinkedHashMap来说,初始容量如果不设置默认是16,超过16×LOAD_FACTOR,会resize(2 * table.length),扩大2倍:采用 Entry[] newTable = new Entry[newCapacity]; transfer(newTable),即整个数组Copy, 那么对于一个需要做大容量CACHE来说,从16变成一个很大的数量,需要做多少次数组复制可想而知。如果初始容量就设置很大,自然会减少resize, 不过可能会担心,初始容量设置很大时,没有Cache内容仍然会占用过大体积。其实可以参考以下表格简单计算下, 初始时还没有cache内容, 每个对象仅仅是4字节引用而已。
不仅是map, 还有stringBuffer等,都有容量resize的过程,如果数据量很大,就不能忽视初始容量可以考虑设置下,否则不仅有频繁的resize还容易浪费容量。
发表评论
-
java注解
2019-03-27 13:42 0https://blog.csdn.net/mrs_wu/a ... -
jsonp原理
2019-03-26 15:39 0https://blog.csdn.net/hansexpl ... -
BufferedImage在linux下createGraphics卡住的问题
2019-02-28 17:30 0BufferedImage在linux下createGra ... -
记第二次面试(平安)
2019-02-21 22:31 01.JVM调优 2.线程池,几种线程的帮助类 3.Has ... -
ueditor处理webp图片
2019-02-28 17:26 671今天运营MM突然说,资讯管理功能用不了,从 ... -
记一次面试(金地)
2019-01-28 09:40 0首先是笔试部分: 1. ... -
java io
2018-11-28 23:43 0https://www.cnblogs.com/hoojj ... -
Java 集合详解
2018-11-26 15:27 0https://www.cnblogs.com/ysocean ... -
Redis分布式锁的正确实现方式
2018-10-06 10:44 509分布式锁一般有三种实现方式: 1. 数据库乐观锁; 2 ... -
在 CentOS7 上安装 Tomcat9
2018-01-30 19:25 3556 下载 apache-tomcat-9.0.0.M4.t ... -
在CentOS7上安装JDK1.8
2018-01-30 18:50 3681 通过 SecureCRT 连接到阿里云 CentOS7 ... -
centos7自定义安装redis
2017-12-18 16:26 5351.下载 wget http://download.re ... -
centos7自定义安装mysql5.7
2017-12-15 18:12 4751.查找卸载原有的mysql 方法1 rpm -qa| ... -
centos7 安装nginx
2017-12-13 18:18 3201.解压 tar -xf nginx-1.10.1.ta ... -
mysqldump 每日定时备份
2017-09-25 19:37 608首先编写脚本: date_cur=$(date &quo ... -
centos7 安装nginx
2017-05-15 16:07 01、下载nginx-release包 以CentOS 7为 ... -
读书笔记
2017-04-18 11:31 02017-04-18 1.程序员,这 ... -
centos7下mongodb的安装与配置
2017-04-13 16:59 6911.下载mongodb安装包 https://www.m ... -
服务器迁移心得
2016-11-04 15:22 4801.数据传输直接从源到目标,不要经过自己的电脑,用到的li ... -
svn lock
2016-09-13 10:33 434在网上的解决方案中,往往都是通过Clean up来解决,如下 ...
相关推荐
HashMap有多个构造函数,但我们主要关心的是`HashMap(int initialCapacity)`,它允许我们指定HashMap的初始容量。在默认的情况下,HashMap的容量是16。但是,如果我们通过构造函数指定了一个数字作为容量,那么...
由于没有指定初始容量,`Vector`会在第一次添加元素时进行扩容,这会带来额外的时间和空间开销。更好的做法是根据预期的元素数量提前设置初始容量,以减少扩容操作: ```java public Vector v = new Vector(20); //...
集合类使用初始容量和加载因子调整自己的大小。集合类全部支持泛型,是一种数据安全的用法。 Java集合框架定义了几个接口。这些集合接口决定了集合实现类的基本特性。对于不同的集合实现类提供了这些标准接口的不同...
errorInit.java 演示变量初始化错误的程序 integerExample.java 演示各种整型变量的使用 isPrime.java 判断素数 leapYearByIf.java 用if语句判断闰年 leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper...
5. **排课算法实现**:遗传算法的实现通常包括初始化种群(随机生成初始的课程安排)、计算适应度(根据满足约束的程度评价解的好坏)、选择操作(依据适应度保留优秀解)、交叉操作(交换两个解的部分信息生成新解...
### Java装箱问题详解 #### 一、问题背景与描述 在实际的生产和物流场景中,经常遇到如何高效地利用容器装载货物的问题。本篇文章主要介绍了一种通过编程解决装箱问题的方法。具体来说,假设我们有无限多个容量...
用类描述计算机中 CPU 的速度和硬盘的容量。要求 Java 应用程序有 4 个类,分别是 PC,CPU,HardDisk,Test,Test 是主类。 1.PC 类中设置几个属性,创建这些属性的 get,set 方法,用来传值;传创建两个构造方法用来...
摘要:Java堆容量不足可以对性能造成很大影响,这样无疑就给程序带来不可必要的麻烦,本文总结了影响Java堆容量不足的五大原因以及巧妙地去优化? 本文作者Pierre是一名有10多年经验的高级系统架构师,他的主要...
` 这将创建一个空的`StringBuffer`对象,初始容量通常是16个字符。 - **带参数构造器**:`StringBuffer s = new StringBuffer("abc");` 这将创建一个包含指定字符串的`StringBuffer`对象,初始容量是该字符串的长度...
1. **初始化种群**:随机生成一组初始的车辆路线,每条路线可以看作是一个个体,形成种群。 2. **适应度函数**:为每个个体计算适应度值,通常基于总行驶距离或成本。适应度值越高,表示该路线越优。 3. **选择...
1. 修改`tomcat9w.exe`中的Java选项,添加`-XX:PermSize=128m`和`-XX:MaxPermSize=256m`,以及`-Xms`和`-Xmx`来设置初始和最大堆内存。 2. 在`service.bat`文件中,添加`JAVA_OPTS`设置,包括`-Xms`、`-Xmx`、`-XX:...
13. 设置`StringBuffer`初始容量:在创建`StringBuffer`时指定合适的初始容量,可以减少扩容操作,提高性能。 总的来说,优化Java代码涉及多个方面,包括设计良好的数据结构、合理使用API、避免不必要的计算、有效...
3. **初始容量和增量**:`Vector`允许用户在创建时指定初始容量和每次扩展的增量。 #### 三、构造函数 `Vector`提供了三种构造函数: 1. `public Vector(int initialCapacity, int capacityIncrement)` - **...
默认初始容量为10,当添加元素超过容量时,ArrayList会自动扩容,扩容策略通常是当前容量的1.5倍。这通过`System.arraycopy()`方法将原数组元素复制到新的更大的数组中完成。为了提高效率,建议在创建ArrayList时...
### Java中集合类的区别 #### 一、ArrayList与Vector **ArrayList** 和 **...例如,对于 **Hashtable**,推荐的初始容量应足够大以减少重新哈希的次数,并且负载因子通常设置为 0.75 左右以平衡性能和内存使用。
当我们创建一个ArrayList时,并不立即分配所有所需的空间,而是先分配一个初始容量,随着元素的增加,当容量不足时,会自动进行扩容操作。 线性表的动态扩充实现主要涉及到以下几个关键点: 1. **初始化**:线性表...
例如,`java.util.ArrayList`的构造器允许指定初始容量或直接从另一个集合初始化。 3. 方法:每个方法都有一个签名(包括返回类型、方法名和参数列表),以及详细的描述和参数说明。例如,`java.io.File`类的`...
因此,根据预期的元素数量合理设置初始容量是非常重要的: ```java public Vector v = new Vector(20); // 设置初始容量为20 public Hashtable hash = new Hashtable(10); // 设置初始容量为10 ``` 通过这种方式,...
例如,ArrayList每次扩容为其原容量的1.5倍,这可能会影响性能,因此在预估元素数量时,合理设置初始容量是必要的。 11. 容器类与集合的关系:Java中的容器类,如ArrayList、LinkedList等,都实现了Collection接口...
2. **指定初始容量的构造函数**:创建一个具有指定初始容量的空列表。 ```java public ArrayList(int initialCapacity) { if (initialCapacity ) throw new IllegalArgumentException("Illegal Capacity: " + ...