首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >池和堆中的字符串创建

池和堆中的字符串创建
EN

Stack Overflow用户
提问于 2015-11-12 03:06:55
回答 2查看 1.1K关注 0票数 0

在弦乐中几乎没有疑问,

我可能是错误的某些陈述,因为我写这是基于我的理解,从不同的文章在互联网上,请容忍我。

  1. 当我们执行字符串时,str1 =新字符串("newStr1");。这将创建2个字符串对象。一个在常规堆中,另一个在字符串池中。为什么是两个对象及其用法?为什么不只是泳池上的一个?
  2. 如果我们将对象创建为字符串,则str2 =新字符串(“newStr2”).intern();。这将检查池中是否存在类似的(有意义的相等)对象,并给出对它的引用。如果没有,它会在池中创建一个,而不会在堆中创建?如果是这样的话,那么我们应该大部分时间使用实习生来节省内存吗?虽然它会对性能有一定的影响。所以基本上是String str2 = "newStr2"; (对于字符串文本来说实习生是隐式的)
  3. 在Java-6之后,字符串池从perm gen空间转移到堆区域?基本上,我们现在只有一个区域作为堆,或者字符串池现在是堆中的一个单独的部分吗?如果它不是一个单独的部分,那么还会创建两个对象吗?
EN

回答 2

Stack Overflow用户

发布于 2015-11-12 09:06:35

在java中,如果JVM标识了literal("xyz"),它将立即在字符串常量池中创建一个对象,同时如果它标识了新的,那么它将在heap.now中创建一个对象,然后转到查询:

1.String str1 =新字符串( "newStr1“);这里的JVM”newStr1“是字面的,因此它将遵循与文字相对应的规则,因此它在字符串常量池中创建了一个对象。新字符串(“newStr1”)--这里对于新操作符,它遵循与新运算符相对应的规则,因此它也将在堆中创建一个对象。

2.intern():here实习生不会在pool.interno中创建一个对象,用于将字符串对象更改为引用字符串池而不是堆。string s1 = new String("newStr1") --在这里,s1将指向堆区域而不是字符串常量池。 string s1 = new String("newStr1").intern()将使s1指向字符串常量池,因为newStr1是在堆中创建的,而字符串常量s1将不处理字符串对象的创建。

3.permgen :用于有效垃圾收集堆的被划分为不同的区域,比如permgen也是一个区域,仍然是堆中的一个区域,它是heap.please中的一个区域,引用了堆区域的http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/链接。

票数 3
EN

Stack Overflow用户

发布于 2015-11-12 03:22:58

只要认为字符串池是存储String的特殊位置就行了。您可以考虑字符串池也在堆中(据我所知,实际上它是在堆中),只需小心处理该池,即其中的每个值只有一个副本,因此可以很容易地重用同一个实例(例如,当您声明字符串文本时)。

  1. 因为它被告知要这么做。"newStr1"是一个字符串文本,它将在/looked中从池中创建。String str1 = new String (...)告诉JVM创建一个String对象的新实例。因此,它只是简单地遵循你让它做的事情。当然,JIT可以对其进行优化以避免创建新实例(它现在是否正在进行这样的优化?)但是,您描述的行为只是JVM要做的事情。
  2. 就像上面一样。但是,在new String(...) (它创建了一个新的String对象)之后,您调用了intern(),因此在字符串池中进行查找。再一次,行为是它被告知要做的。是的,你是对的,在你的例子中,结果和String str1="asdf";一样,做了一些不必要的工作。但是,在某些情况下,构造函数不接受字符串文本,而且您仍然希望将字符串强制放在字符串池中。在这种情况下,intern()将变得有意义。
  3. Perm Gen 是堆区域的部分。(Sun/OraclePre-8) JVM将堆划分为不同的代,并在其中移动对象,这会影响对象的GC-ed方式。PermGen只是堆中从未被GC编辑过的部分。但是,它仍然是堆的一部分。因此,PermGen更多地与GC算法相关,您可能会注意到,JDK8中已经没有PermGen了。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33663733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档