java数组有多重?

时间:2012-04-05 12:59:07

标签: java arrays

我的代码中有以下声明:

String[] array1 = new String[];

如果array1有1.000.000个元素(所有80个字符的字符串)有多重?我的意思是RAM内存。

2 个答案:

答案 0 :(得分:7)

答案是它取决于许多因素:

  • 您正在使用的JVM;即提供者和版本
  • 您使用的是32位还是64位JVM。
  • 您是否使用“压缩oops”(在64位HotSpot JVM上:-XX:+ UseCompressedOops)。
  • 您是否使用UTF-8字符串(某些HotSpot JVM支持此:-XX:+ UseCompressedStrings)
  • String数组的元素是否为null
  • String数组的元素是否是相同的引用,
  • 字符串是否被实习,以及实习是否有效,
  • Strings是否共享相同的后备阵列,
  • 等等。

默认情况下,动态创建的字符串不会被实现。如果你实习他们,你可以节省空间,如果数据集中有许多“相等”的字符串。但是如果字符串池具有存储开销的另一面(它是一个大的哈希表),那么如果等于不等于字符串的比率太小,那么你浪费空间而不是保存它。

关于支持数组的观点也很复杂。背景是split方法(例如)创建共享原始String'scharacter数组的String对象。如果您创建了大量相同原始字符串的子字符串,则可以节省空间。但另一方面是,如果您创建一个大字符串的小子字符串,则小子字符串可以使原始String的整个后备数组保持可访问状态。

答案 1 :(得分:4)

它依赖于实现。假设一个典型的JVM在内部使用UTF-16编码,它可能是这样的。

100万个元素* 80个字符* 2个字节= 160万个字节用于文本数据。

为每个String的内部数据结构(比如16个字节左右)添加一些开销,对每个String(比如8个字节)的引用,以及对于数组本身的一点点(比如12个字节),你有:< / p>

184,000,012字节