JDK1.6及以前,常量池在方法区,这时的方法区也叫做永久代;JDK1.7的时候,方法区合并到了堆内存中,这时的常量池也可以说是在堆内存中;JDK1.8及以后,方法区又从堆内存中剥离出来了,但实现方式与之前的永久代不同,这时的方法区被叫做元空间,常量池就存储在元空间。
然后类加载之后,将class常量池中存放的符号引用转存到运行时常量池中; 然后经过验证,准备阶段之后,在堆中生成驻留字符串的实例对象(也就是上例中str1所指向的”abc”实例对象),然后将这个对象的引用存到全局String Pool中,也就是StringTable中; 最后在解析阶段,要把运行时常量池中的符号引用替换成直接引用,那么就...