【JVM】JVM存放字符串的位置

字符串存放的位置有两个:字符串常量池堆内存

  1. 使用常量字符串初始化的字符串对象,它的值存放在字符串常量池中;
String str = "Hello World!";
  1. 使用字符串构造方法创建的字符串对象,它的值存放在堆内存中;
String str = new String("Hello World!");

JDK 1.7之前,字符串常量池是在PermGen区域;
JDK1.7之后,字符串常量池移到了堆内存中,并且可以被垃圾收集器回收。

intern方法

String提供了一个API: java.lang.String.intern(),它可以手动将一个字符串对象的值存储到到字符串常量池中。

intern方法的实现底层是一个native方法,在Hotspot JVM里字符串常量池它的逻辑在注释里写得很清楚:如果常量池中有这个字符串常量,就直接返回,否则将该字符串对象的值存入常量池,再返回。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JVM中的字符串常量池是个有些玄幻的玩意儿,关于它的细节,各类书籍和网站上众说纷纭。本文试图参考尽量权威的资料,找...
    LittleMagic阅读 8,247评论 8 20
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,854评论 3 83
  • 概述 在分析字符串常量池之前,先来分析一下java的内存区域,然后再各种的情况分析一下各种情况下的情况; 在《深入...
    riverhh阅读 4,208评论 0 2
  • 从网上复制的,看别人的比较全面,自己搬过来,方便以后查找。原链接:https://www.cnblogs.com/...
    lxtyp阅读 5,150评论 0 9
  • 前言 RTFSC (Read the fucking source code )才是生活中最重要的。我们天天就是要...
    二毛_coder阅读 3,258评论 1 1