java - 字符串内存模型 - java6

标签 java string memory-management

here 可以清楚地看出,在 Java 中组成 String 的实际字符实际上存储在 private final char value[]; 字符数组中。

谁能帮我理解以下表达式的问题 String text = "Hello World";

  1. StringPool 中实际存储了什么?我读过很多地方,它是 String 文字。如果是这样,那么字符串对象和字符串文字之间到底有什么区别,因为两者都必须由 char[]
  2. 支持
  3. 如果 String 引用被标记为 Constant (final),它是否也会存储在 Method Area 内的 Runtime Constant Pool 中?
  4. 如前所述here ,实际的 char[] 值 仅在堆上创建。因此,当在使用 new 运算符创建的 String 对象上调用 intern() 方法时,将复制到 StringPool(假设它不是字符数组)?

编辑:

如前所述here , StringPool 被实现为一个 HashMap。那么 same 的关键和值(value)是什么?该值似乎不能是 char[] 值,因为它是在堆上创建的。

最佳答案

没有这方面的专家,但我会试一试。

String text = "Hello World";

enter image description here

enter image description here

lcd(load a constant) 在常量池表中查找字符串。找到#2,它的地址是“Hello Word”,位于#14

引用:What is the purpose of the Java Constant Pool?

引用:https://www.ibm.com/developerworks/library/it-haggar_bytecode/#opcode

关于java - 字符串内存模型 - java6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49779669/

相关文章:

java - 以蛇形打印数组时如何处理 ArrayIndexOutofBounds

java - String的replace()方法的问题

SQL在不知道列的情况下将行选择到字符串变量中

java - 除非明确注释,否则不会发现 CDI bean

java - 在列表中查找对象的索引

java - HttpSessionAttributeListener 是否异步处理?

swift - 从 NSMutableAttributedString 中删除项目符号点

memory-management - VirtualAlloc对齐

linux - chroot 如何影响动态库内存使用?

linux - 在 Linux 中确定 'Free' 内存