小学徒进阶系列—JVM对String的处理
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 对于String类型,java官网的文档是这样子描述的: http://bbs.itheima.com/thread-23776-1-1.html?fstgj String类代表着字符串。java程序中的所有字符串字面值(如"abc")都作为此类的实例实现。 字符串是常量,他们的值在创建之后不能更改。因为 String 对象是不可变的,所以可以共享。 那么,jvm是怎么共享这些字符串的呢? 为了节省内存,提高资源的复用,jvm引入了常量池这个概念,它属于方法区的一部分的,作用之一就是存放 编译期间 生产的各种字面量和符号引用。而从 前面的博文《 深入了解JVM—内存区域 》我们可以知道,方法区的垃圾回收行为是比较少出现的,该区中的对象基本不会被回收,可以理解成是永久存在的。 因此,缓存在字符串缓冲区中的字符串对象基本是不被回收的,而jvm也正是通过复用这些对象从而达到共享作用。 从上一段话中的概念可以知道, 一般情况下,只有编译期间可以确定下来的的字符串才能存放到缓冲区中 。为什么要强调是一般情况下呢?因为String类为我们提供了一个intern()方法,它可以帮我们将不存在于缓存池中的java字符串添加到缓存池中,并返回缓存池中该字符串对象的引用。 具体关于intern(