问题标签 [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 投票
4 回答
945 浏览

java - java中运行时连接和编译时连接的区别

上述原因在JLS-中给出

• 由常量表达式(第 15.28 节)计算的字符串在编译时计算,然后将其视为文字。

• 在运行时通过连接计算的字符串是新创建的,因此是不同的。

我想问的是-为什么在运行时计算的字符串与在编译时计算的字符串不同?是因为内存分配,一个是在堆中分配内存,一个是在字符串池中分配内存还是有其他原因?请澄清。

0 投票
2 回答
137 浏览

java - 当我们创建一个新的 String 对象时,在构造函数中传递的 String 字面量在哪里

当我们在 Java 中编写

然后与 比较if(S1==S2),我们得到 true 作为布尔结果。相同的解释是字符串常量是在字符串池中创建的,因此它与 S1 和 S2 在这里引用的字符串常量相同。另外,如果我们写类似

然后与 进行比较if(S1==S2),我们得到错误。原因是 S1 和 S2 的引用不同,因为字符串文字是在堆中创建的。

我的问题是,在创建的构造函数中传递的字符串文字“TestString”在哪里?它与字符串文字/常量相同吗?因此应该像案例 1 一样在池中创建?如果是那么当我们在上面两个语句之后写类似的东西时

这不应该创建一个新的字符串文字,比较if(S1==S3)应该给我真,但它给假。

所以我无法弄清楚这个字符串文字在何时何地在构造函数中被创建。

任何帮助将不胜感激。谢谢

0 投票
3 回答
4231 浏览

java - String s = new String("abc") 内存分配

我知道这会在堆中创建一个新的字符串对象。但我对 Kathy Sierra 在 SCJP 书中的陈述感到困惑。

它指出上述语句将在堆中创建一个对象,同时如果字符串“abc”不存在于字符串池中,它也会将“abc”添加到字符串池中。

谁能告诉我在上述情况下是否还在字符串池中创建了对象“abc”。

0 投票
1 回答
365 浏览

java - 字符串和 Permgen 内存

我有一个格式 Map 存储在文件中的地图。该文件有超过 100,000 条记录。

每个条目的价值接近10k。

我将 1000 条记录加载到内存中的地图中,处理它们,然后清除地图并加载接下来的 1000 条记录。

我的问题是:

  1. 由于字符串存储在 permgen 内存区域中的字符串池中,当我清除地图时,字符串会被垃圾收集吗?

  2. 如果他们没有被垃圾收集,有没有办法强制他们被垃圾收集?

  3. 是否可以保证如果程序内存不足,JVM 会在抛出 OutOfMemory 异常之前清理 permGen 内存?

0 投票
2 回答
943 浏览

java - 更改 String 对象时的 Java String Immutability 存储

我知道如果一个字符串是用文字初始化的,那么它会在字符串池中分配一个空间,如果用新的关键字初始化它会创建一个字符串的对象。但我对下面写的一个案例感到困惑。

我的问题是,如果使用 new 关键字创建字符串,然后使用文字更新它的值怎么办?

例如

那么如果写下一条语句如下。

所以我的问题是,

1 它会在字符串池中创建字符串文字还是会更新该对象的值?

2 如果它在字符串池中创建一个新的文字,当前存在的对象会发生什么?它会被销毁还是会一直存在,直到调用垃圾收集器。

这是一个小字符串,如果字符串包含数千个字符,那么我只是担心它使用的空间。所以我的关键问题是空间。

分配文字后,它会立即从堆中释放空间吗?

谁能解释从第一条语句到第二条语句的值是什么以及内存区域(堆和字符串池)会发生什么。

0 投票
1 回答
115 浏览

java - 运行时常量池 GC 收集

GC 是否在运行时常量池上运行?

如果是,什么时候?如果不是,如果字符串池中满是字符串文字会怎样?

我做了谷歌,但在我的机器上尝试了这个问题的任何相关内容。

0 投票
7 回答
4206 浏览

java - 这个 Java 代码片段是如何工作的?(字符串池和反射)

Java字符串池加上反射可以在Java中产生一些难以想象的结果:

上面的代码将打印:

马里奥怎么了?

0 投票
7 回答
3254 浏览

java - 为什么 jvm 每次使用 new 关键字创建字符串时都会创建新的字符串对象

如果为内存优化而jvm创建string pool,那么为什么每次我们使用new关键字创建字符串时它都会创建新对象,即使它存在于string pool

0 投票
4 回答
696 浏览

java - JAVA:将创建多少个对象?为什么?

我正在SCJP考试,在一本书中找到了一行。

上面写着,将在上面一行创建两个对象。一对一。HEAP_STRING POOL

我对那里的声明不满意。有人可以让我理解为什么要创建两个对象吗?

提前致谢。

0 投票
1 回答
81 浏览

java - 字符串池在java中是如何工作的?

将这个语句创建两个字符串对象。一个存储在堆中,另一个存储在字符串池中。

我搜索了很多,但找不到任何文档。

如果是/否,请给我同样的理由/参考。