一个字符串类型的值能储存最大容量是多少啊?

楼下


呃,可以看源码,而且情况很多,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)。


分享到:


相關文章: