问题标签 [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.
java - java中运行时连接和编译时连接的区别
上述原因在JLS-中给出
• 由常量表达式(第 15.28 节)计算的字符串在编译时计算,然后将其视为文字。
• 在运行时通过连接计算的字符串是新创建的,因此是不同的。
我想问的是-为什么在运行时计算的字符串与在编译时计算的字符串不同?是因为内存分配,一个是在堆中分配内存,一个是在字符串池中分配内存还是有其他原因?请澄清。
java - 当我们创建一个新的 String 对象时,在构造函数中传递的 String 字面量在哪里
当我们在 Java 中编写
然后与 比较if(S1==S2)
,我们得到 true 作为布尔结果。相同的解释是字符串常量是在字符串池中创建的,因此它与 S1 和 S2 在这里引用的字符串常量相同。另外,如果我们写类似
然后与 进行比较if(S1==S2)
,我们得到错误。原因是 S1 和 S2 的引用不同,因为字符串文字是在堆中创建的。
我的问题是,在创建的构造函数中传递的字符串文字“TestString”在哪里?它与字符串文字/常量相同吗?因此应该像案例 1 一样在池中创建?如果是那么当我们在上面两个语句之后写类似的东西时
这不应该创建一个新的字符串文字,比较if(S1==S3)
应该给我真,但它给假。
所以我无法弄清楚这个字符串文字在何时何地在构造函数中被创建。
任何帮助将不胜感激。谢谢
java - String s = new String("abc") 内存分配
我知道这会在堆中创建一个新的字符串对象。但我对 Kathy Sierra 在 SCJP 书中的陈述感到困惑。
它指出上述语句将在堆中创建一个对象,同时如果字符串“abc”不存在于字符串池中,它也会将“abc”添加到字符串池中。
谁能告诉我在上述情况下是否还在字符串池中创建了对象“abc”。
java - 字符串和 Permgen 内存
我有一个格式 Map 存储在文件中的地图。该文件有超过 100,000 条记录。
每个条目的价值接近10k。
我将 1000 条记录加载到内存中的地图中,处理它们,然后清除地图并加载接下来的 1000 条记录。
我的问题是:
由于字符串存储在 permgen 内存区域中的字符串池中,当我清除地图时,字符串会被垃圾收集吗?
如果他们没有被垃圾收集,有没有办法强制他们被垃圾收集?
是否可以保证如果程序内存不足,JVM 会在抛出 OutOfMemory 异常之前清理 permGen 内存?
java - 更改 String 对象时的 Java String Immutability 存储
我知道如果一个字符串是用文字初始化的,那么它会在字符串池中分配一个空间,如果用新的关键字初始化它会创建一个字符串的对象。但我对下面写的一个案例感到困惑。
我的问题是,如果使用 new 关键字创建字符串,然后使用文字更新它的值怎么办?
例如
那么如果写下一条语句如下。
所以我的问题是,
1 它会在字符串池中创建字符串文字还是会更新该对象的值?
2 如果它在字符串池中创建一个新的文字,当前存在的对象会发生什么?它会被销毁还是会一直存在,直到调用垃圾收集器。
这是一个小字符串,如果字符串包含数千个字符,那么我只是担心它使用的空间。所以我的关键问题是空间。
分配文字后,它会立即从堆中释放空间吗?
谁能解释从第一条语句到第二条语句的值是什么以及内存区域(堆和字符串池)会发生什么。
java - 运行时常量池 GC 收集
GC 是否在运行时常量池上运行?
如果是,什么时候?如果不是,如果字符串池中满是字符串文字会怎样?
我做了谷歌,但在我的机器上尝试了这个问题的任何相关内容。
java - 这个 Java 代码片段是如何工作的?(字符串池和反射)
Java字符串池加上反射可以在Java中产生一些难以想象的结果:
上面的代码将打印:
马里奥怎么了?
java - 为什么 jvm 每次使用 new 关键字创建字符串时都会创建新的字符串对象
如果为内存优化而jvm
创建string pool
,那么为什么每次我们使用new
关键字创建字符串时它都会创建新对象,即使它存在于string pool
?
java - JAVA:将创建多少个对象?为什么?
我正在SCJP
考试,在一本书中找到了一行。
上面写着,将在上面一行创建两个对象。一对一。HEAP
_STRING POOL
我对那里的声明不满意。有人可以让我理解为什么要创建两个对象吗?
提前致谢。
java - 字符串池在java中是如何工作的?
将这个语句创建两个字符串对象。一个存储在堆中,另一个存储在字符串池中。
我搜索了很多,但找不到任何文档。
如果是/否,请给我同样的理由/参考。