当前位置: 首页 > 知识库问答 >
问题:

字符串内存模型-java6

司空默
2023-03-14

从这里可以清楚地看到,在Java中组成字符串的实际字符实际上存储在私有最终字符值[]中 字符数组。

有人能帮我理解以下关于表达式String text=“Hello World”的问题吗

  1. 什么是真正存储在Stringpool?我读过很多地方,它是String字面意思。如果是这种情况,那么String Object和String文字之间的区别到底是什么,因为两者都必须由char[]
  2. 支持
  3. 如果字符串引用被标记为常量(最终),它也会存储在方法区域内的运行时常量池中吗?
  4. 如上所述,实际的char[]值仅在堆上创建。因此,当在使用new运算符创建的String对象上调用intern()方法时,什么将被复制到Stringpool(假设它不是字符数组)?

编辑:

正如这里提到的,StringPool是作为HashMap实现的。那么,同样的问题的关键和价值是什么呢?该值不能是char[]value,因为它是在堆上创建的。


共有1个答案

满才
2023-03-14

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

String text = "Hello World";

LCD(加载常量)在常量池表中查找字符串。找到#2,其地址为Hello Word,位于#14

参考:Java常量池的用途是什么?

参考:https://www.ibm.com/developerworks/library/it-haggar_bytecode/#opcode

 类似资料:
  • (译注:这一个item有相当深的理论深度,原文也比较晦涩难懂,翻译者提醒大家,最好参照原文理解,如果翻译中有什么不恰当的地方,还请批评指出,不胜感谢。) 所谓“内存模型”,是计算机(硬件)体系结构与编译器双方之间的一种约定。有了它,大多数程序员便不用处处考虑日新月异的计算机硬件细节。如果没有内存模型,那么线程机制、锁机制及无锁编程等都无从谈起。 内存模型的最关键保证是:两个线程可以各自独立地存取各

  • 问题内容: 如果我将文件的内容作为字符串存储在内存中而不将其写出到磁盘,该如何请求文件?这是一个例子: 问题答案: 在module.js中查看_compile,_extensions和_load

  • 问题内容: 关于Swift如何管理内存地址我有些不了解 1.参考类型 这里和是指向 相同存储位置的 2个指针。 好。 2.值类型 现在和现在都涉及到该机制。 […]但是,Swift仅在绝对必要时才在幕后执行实际复制。Swift会管理所有值复制以确保最佳性能,因此,您不应避免分配以试图抢占该优化。https://developer.apple.com/library/ios/documentatio

  • 问题内容: 在下面的代码中: 为了确定从CloudFoundry接收JSON数据所需的数据类型,请测试上面的示例代码以了解vs 类型的内存分配。 类型变量的预期大小为1个字节x 4个ascii编码字母= 4个字节,但是大小显示为16个字节。 对于类型变量,GO将字符串作为字符串文字嵌入到可执行程序中。它将在运行时使用该函数将字符串文字转换为字节片。就像是… 类型变量的预期大小再次为1字节x 4 a

  • 内存模型是非常重要的,理解Go的内存模型会就可以明白很多奇怪的竞态条件问题,"The Go Memory Model"的原文在这里,读个四五遍也不算多。 这里并不是要翻译这篇文章,英文原文是精确的,但读起来却很晦涩,尤其是happens-before的概念本身就是不好理解的,很容易跟时序问题混淆。大多数读者第一遍读Go的内存模型时基本上看不懂它在说什么。所以我要做的事情用不怎么精确但相对通俗的语言

  • 介绍 基于 Swoole Table 跨进程共享内存表的模型。通过注解定义,框架底层自动创建SwooleTable,直接使用模型操作,方便快捷! 模型定义 喜闻乐见的对命名空间、类名无要求,只要按照规定写注解即可! 具体定义看下面代码: namespace Test; use Imi\Model\MemoryTableModel; use Imi\Model\Annotation\Column;