【问题标题】:how the empty string ("") store in memory in Java?Java中的空字符串(“”)如何存储在内存中?
【发布时间】:2017-07-04 01:23:20
【问题描述】:

空字符串(“”)如何在 Java 中存储在内存中?

空字符串""的长度为0,那么如何存入内存呢?

【问题讨论】:

  • 0 长度并不意味着 0 内存占用。
  • 有一个内存用于引用,而内存在堆中的引用指向。
  • 与任何其他字符串的存储方式相同,即带有 char[] 字段的 String 对象。空字符串没有什么特别之处,它只有一个长度为 0 的char[]
  • 添加到 Andreas 的评论中:当存储诸如 char[] 之类的数组时,必须将长度存储在某个地方(否则程序如何知道长度是多少?)。跨度>

标签: java


【解决方案1】:

借自answer。程序为空字符串打印 32 个字节(字符串池中的 "" 为 0)。

public static void main(String... args) {
    long free1 = free();
    String s = "";
    long free2 = free();
    String s2 = new String("");
    long free3 = free();
    if (free3 == free1) System.err.println("You need to use -XX:-UseTLAB");
    System.out.println("\"\" took " + (free1 - free2) + " bytes and new String(\"\") took " + (free2
            - free3) + " bytes.");
}

private static long free() {
    return Runtime.getRuntime().freeMemory();
}

另外,请查看answer

【讨论】:

  • 一个字符串实际占用的内存量在运行时会因优化而异。
猜你喜欢
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多