方法区到底存在于内存的哪个地方?是独立于内存,还是位于内存之中。以String str = "haha"为例子,编译器在编译时候就能确定这个haha,那么也就是说haha位于常量池里,下面我们对常量池进行下理解。
首先方法区保存的是唯一的元素,那么常量随着.class文件走,那么class文件存储于方法区,至于new 的String也就不难理解了,是将value指向了常量池,那么也就是说常量池里面的都是唯一元素,那么常量池也应该在方法区,不过根据深入java虚拟机的那段引用,haha这个字符串在常量池中的CONSTANT_STRING_INFO表中存储,常量池属于类型信息的一部分,类型信息位于方法区,而方法区在jvm内存模型中的堆中由JVM类分配。所以,haha值存在于堆空间。
上面这段话,出自"深入jVM"。看到这些。我表示,我完全不淡定了。到底应该在哪呢?请顺便贴出你的引用{:soso_e113:} |
|