一個字符串類型的值能儲存最大容量是多少啊?

樓下


呃,可以看源碼,而且情況很多,string的實現數組最大的長度當然是Integer.MAX_VALUE,但是,Java在常量池中有一個變體utf8表,該表有個字段最大是65535,null佔用兩個字節,所以,當string中放的是字母,源碼中有個判斷(<65535),也就是能放65534個字母,但是如果是漢字等,判斷條件是(<=65535),也就是能放65535個漢字,當然,上面的情況都是在編譯期,如果是在運行期的話,最大的長度就是Integer.MAX_VALUE了,也就是將近4g,這基本上是不可能有的了,最長的string場景應該是序列化類吧,撐死幾千。


ZJef


從語言上來看,java.util.List是個接口,其下有N多實現,最常用的是ArrayList和LinkedList及其各種繼承或同步化實現(如Vector/Queue/Stack這些的)

ArrayList內部是拿數組存儲,那麼上限就是Integer.MAX_VALUE

LinkedList內部是個鏈表,理論上是無限的

另外,List裡放的東西都是在內存裡的(當然你也可以自己實現一個放磁盤上的),因此能放多少也取決於放的東西的大小以及種類。

大小方面很容易計算,一個對象如果1K,那400,000個就至少要佔用400M的內存(不算其他佔用)。

而虛擬機內存分類方面,如果是普通對象,一般佔用的都是堆(Heap)空間,如果是常量或是類似String.intern()出來的東東,則佔用的是永生帶(Permanent Generation)。


分享到:


相關文章: