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

java - 关于JVM的字符串常量池 ,这篇文章是不是说错了?

终睿
2023-12-03

这篇文章中的
https://www.baeldung.com/native-memory-tracking-in-jvm
2.5. Symbols
JVM stores interned strings in a special native fixed-sized hashtable called the String Table, also known as the String Pool. We can configure the table size (i.e. the number of buckets) via the -XX:StringTableSize tuning flag.

是不是说错了,字符串常量池不是使用堆实现吗?怎么是本地内存了

d

共有2个答案

骆文彬
2023-12-03

也是内存的一部分。

在Java中,内存分为两种,一种是栈内存,另一种就是堆内存。

谭京
2023-12-03

该文章没有说错,JVM的字符串常量池确实是使用本地内存实现的。

在Java中,字符串常量池是JVM用于存储字符串常量的一种机制。它允许Java程序在运行时重复使用字符串常量,从而节省内存空间。字符串常量池通常是在Java堆内存之外的本地内存中实现的。

文章中提到的“String Table”和“String Pool”实际上是同一个概念,指的是字符串常量池。这个池子的大小可以通过JVM的参数进行配置,如文章中所提到的-XX:StringTableSize。

因此,文章中关于字符串常量池的描述并没有错误,它确实是使用本地内存实现的。

 类似资料:
  • 问题内容: 这与Java字符串常量池有关。在我的一个程序中,我正在解密数据库的密码并将其存储在字符串中。我听说Java字符串将存储在Constant池中,并且不会被VM重新启动或加载了String Quits的ClassLoader破坏。 如果是这种情况,我的密码将存储在字符串池中。我非常关心这个问题。还有其他方法可以销毁这些文字或我可以做的其他任何事情。 请对此提出建议, 问候,阳光明媚。 问题

  • 当使用文字创建字符串时,它会存储在池中。但当使用new运算符创建字符串对象时,它会将对象存储在堆中。 但是,堆中的对象只是一个指向存储在池中的文本的指针,还是一个存储在堆中的简单字符串对象,符合GC的条件?

  • 本文向大家介绍Java中的字符串常量池是什么?,包括了Java中的字符串常量池是什么?的使用技巧和注意事项,需要的朋友参考一下 当您将字符串存储为 JVM会直接在一个单独的内存块(称为String常量池)中创建具有给定值的String对象。 每当我们尝试创建另一个String作为 JVM会验证String常量池中是否存在具有相同值的String对象,如果不是,JVM会创建新对象而不是创建新对象,而

  • 如这些问题中所述:问题1 在以下情况下,JVM将创建一个新的字符串对象,而不是使用字符串池中的现有对象: 然而,在阅读了下面两个类似的陈述之后,我有一个疑问。 从SCJP准备书: 当编译器遇到字符串文字时,它会检查池中是否已经存在相同的字符串。如果找到匹配项,对新文本的引用将指向现有的String,并且不会创建新的String文本对象。 来自JavaRanch: 在本例中,由于关键字“new”,我

  • 当使用关键字 new 创建字符串时,它使用采用 String 文本的构造函数创建新的 String 对象。我想知道在调用 String 构造函数之前,文本是否存储在常量池中。 我这么问的原因是,在《OCA Java SE 7程序员I认证指南》中,Mala Gupta写道: 她在第一行表示,new创建的String对象不会存储在常量池中。这很好,但不清楚的是,第一行构造函数中的字面“Summer”是

  • 当我写下面的代码时,我遇到了一个问题 然后我运行我的代码,控制台打印这个 这让我很困惑。为什么第二次打印是真的,而第一次打印是假的??在我对String文字池的理解中,当定义一个字符串时,JVM将检查池中是否包含该字符串,如果不包含,则将该字符串放入池中。 在我的代码中,变量Hello存在于字符串池中,“Helo”和“lo”也在池中,我的问题是 如果池中存在Helo和lo串联的结果。 关于str5