java字符串数组占用多少空间? 更具体地说,字符串数组看起来像这样的空间(以字节为单位):
Longbowman
kingdom
lord
weapon1,weapon2,weapon3
armor1,armor2,armor3
我问这个是因为我要创建一个包含5,000多个这些数组的程序,并想知道它将占用多少空间,所以我知道是否应该重做数据存储。
总结一下,字符串数组(如果可量化的话)占用了多少空间?
答案 0 :(得分:16)
字符串 array 只是一个引用数组 - 大小为N的数组将占用大约(N * 4 + 20)或(N * 8 + 20)个字节,具体取决于a的大小JVM中的引用。
如果您对总存储空间感兴趣,那么您应该计算出已经有多少个独立的String对象, 你有多少个数组。如果你有5000个数组,但它们大多包含对相同几个字符串的引用,那么它很可能会很好。如果你有5000个数组,每个数组包含5个字符串,这些字符串在其他任何地方都没有使用,那就是25,000个字符串...它们可能不是很多(长度为20的字符串可能需要大约60个字节)。 / p>
当然,上下文在这里很重要:你的代码会运行什么?如果它在桌面PC上运行,那么可能不会出现问题......它可能可能在手机上出现问题。
答案 1 :(得分:1)
字符串数组可以随意使用吗?您定义String数组的大小。 String [] abc = new String [80]。 但我想你已经知道了......也许我没有得到你的问题。
1个字符= 2个字节而不是4个字节,因为Java使用16位unicode - 这是你要找的吗?
Integer.MAX_VALUE还是可用堆?可能是最大尺寸?
答案 2 :(得分:1)
回答并不容易,因为String是一个包含许多字段的复杂对象。这不仅仅是有多少个字符的问题。它还取决于系统上可用的内存量。在64GB RAM服务器上是一个问题吗?不,在手机上?是。变量太多可能会影响答案。
您正在通过优化来驱动您的代码,而这不是应该的方式。你应该根据你的功能来推动你的代码。
答案 3 :(得分:1)
准确测量内存使用情况的唯一方法是使用内存分析器。
我编写了一个简单的程序,可以分配5,000个符合您描述的数组。然后我用YourKit测量了它的内存使用情况。
阵列使用的内存量相差十倍:
答案 4 :(得分:0)
Jon Skeet是正确的(几乎总是如此),但您可以通过使用对enums
和EnumSets
的引用而不是对象的“无类型”字符串表示来大大减少内存使用量你在提议。
使用类型化数据,尤其是enums
,也是很好的编码实践。