问题标签 [string-pool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
141 浏览

java - 运行时常量池位置

String 对象存储在堆中。例如:

s1对象将存储在堆中;

字符串文字存储在字符串常量池中。

s2对象将存储在字符串常量池中(可能在堆内)。

我听说过运行时常量池

但我不明白具体会在那里存储什么。和字符串常量池一样吗?或者我应该写什么让它存储在运行时常量池中?

0 投票
2 回答
78 浏览

java - intern() 方法对性能有影响吗?

我对该intern()方法的有用性有些困惑。

这行代码可以消除我的困惑:

上面这行代码会创建多少个对象?如果它将在堆内存和字符串池内存中创建一个对象,那么该intern()方法如何提高性能?

0 投票
1 回答
903 浏览

java - 字符串池是如何用java中的桶来衡量的

在阅读这篇关于字符串池及其多年来的变化的文章时,我遇到了以下声明:

在 Java 7u40 之前,默认池大小为 1009 个存储桶,但该值在最近的 Java 版本中会发生一些变化。准确地说,从 Java 7u40 到 Java 11 的默认池大小是 60013,现在增加到 65536。

那么,字符串池中的存储桶是什么?这些与实习字符串的数量有什么可比性?这个概念是否类似于哈希图中的存储桶?

0 投票
7 回答
2497 浏览

java - 连接多个字符串时会创建多少个字符串对象?

我在一次采访中被问及将在给定问题上创建的对象数量:

我回答说在字符串池中将创建6 个对象。

3 将针对三个变量中的每一个。
1 将用于str1 + str2(比方说str)。
1 将用于str2 + str3.
1 代表str + str3( str = str1 + str2)。

我给出的答案是否正确?如果不是,正确答案是什么?

0 投票
1 回答
137 浏览

java - 新创建的字符串在哪里?堆内存还是字符串常量池?

根据 Java,

有两个地方存储字符串。字符串文字池和堆内存根据其创建。我需要知道,当将字符串分配给另一个字符串时,新创建的字符串将存储在哪里?

我已经对堆和字符串池中的字符串类型进行了赋值操作。我得到了这样的结果。

但当,

现在,如果我这样做

相似地,

现在,

以上是我在 IDE 上得到的输出。根据此输出,在字符串池中创建了一个新的 strNew 引用对象,并在堆中创建了一个新的 strNewH 引用对象。这是对的吗?

0 投票
0 回答
165 浏览

java - 密码存储在java进程内存中

我正在处理一个问题,即密码存储在 java 进程内存中,因为密码存储在字符串中(因此存储在字符串池中)。我对代码进行了更改以使用 char[]。现在的问题是,我的应用程序正在通过 POST CALL 使用另一个服务,同时设置:

conn.setRequestProperty(key, headers.get(key));

我必须将 char[] 转换为字符串,从而在字符串池中创建一个条目。那么有没有办法处理这个问题,即无论密码不应该存储在进程内存中,还是在最坏的情况下,任何方法都可以最大限度地减少其在字符串池中的生存时间。

0 投票
1 回答
52 浏览

java - 如果从方法返回值,字符串池是否有效?

我对Java中的字符串池有一些了解。网络中的所有示例都与显式创建变量有关。但是如果我从方法返回硬编码字符串会发生什么。是使用字符串池还是会为每个方法调用一次又一次地创建字符串。我找不到有关此案的任何信息。

我有这样的例子:

常量示例:

我想知道,我的第一个案例是使用字符串池吗?哪种情况会更快?

0 投票
1 回答
134 浏览

java - Java:如何在不膨胀字符串池的情况下读取文件?

请看下面的代码片段:

如您所见,文件的每一行都被读取并存储在“line”变量中。由于 'line' 是字符串类型,它的内容存储在字符串池中。存储在字符串池中的字符串不会被 Java 垃圾收集器收集,而是在程序的整个生命周期内都保留在那里。

如果文件非常大,字符串池可能会膨胀。您知道如何在将所有行都存储在字符串池中的情况下读取文件吗?我只是将文件行存储为任何对象,这意味着它会在不需要时从堆中删除。

0 投票
2 回答
46 浏览

java - 同一变量的堆内存分配

以上语句将在堆上创建两个对象,还是 jvm 返回相同的对象?提前致谢

0 投票
1 回答
48 浏览

java - 为什么相同的实习字符串文字在此 java 代码片段中有多个值?

我找到了这个线程这个 Java 代码片段是如何工作的?(字符串池和反射)谈论使用反射改变字符串的值。

我完全理解这个技巧,但稍作改动,它就不再像预期的那样工作了。

你能解释一下这段代码发生了什么吗?

.

上面的代码打印:

你好再见

为什么字符串litteral“Hello”在Parent类中引用“Bye bye”但在Child类中引用“Hello”?