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:
一般四五十萬的數據是放得下的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM