list可以存放的数据⼤⼩
ArrayList内部为数组,上限应该是int的最⼤值,20亿左右,LinkedList理论上是⽆限的
ArrayList我们都知道是数组实现的,那么数组的最⼤长度其实就是ArrayList的最⼤长度,说到这⾥,其实有⼈已经有答案了。其实我们看⼀下它的length属性就可以了。length属性是32位的有符号整数,它的最⼤值是2的31次幂,就是2G。为何有这个限制呢?为什么length的属性不是long型呢?我们假设⼀下,如果它是long型的,那么它的最⼤长度是2的63次幂。内存永远也不会有那么⼤吧。即使是字节数组长度是int的,最⼤长都达到2GB.
由此想到了String,这个家伙底层也是基于数组的,是⼀个字符数组。字符是16位的基本类型,⼀个String的最⼤长度是多少呢?就是字符数组的最⼤长度也是2G,占⽤内存是4GB。
字符串长度与大小⼀个数组最⼤的长度是⼀个 int 的最⼤值,也就是 2147483647(2的31次⽅减1),⽽⼀个字符串在 Java 内部是使⽤ char[] 来表⽰的,也就是说⼀个字符串的最⼤长度是 2147483647。
不过这些都是理论值,具体能放多少与 JVM 内存有关, 可以在执⾏ java 命令时加上 -Xmx 1024m 就将 JVM 内存最⼤置为了 1G, 默认情况下是 64MB.
可以写⼀个String[]死循环添加数组,消耗内存,看看会不会死机。
实际开发中,虚拟机默认内存⼤⼩根据不同的虚拟机实现有所不同,可以在启动应⽤时⽤-Xmx调整最⼤堆⼤⼩,⽐如调整堆最⼤⼤⼩为
2G:
⼀般四五⼗万的数据是放得下的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论