黑马程序员技术交流社区

标题: 方法区到底应该位于内存的哪里 [打印本页]

作者: 王阳    时间: 2012-12-8 13:55
标题: 方法区到底应该位于内存的哪里
方法区到底存在于内存的哪个地方?是独立于内存,还是位于内存之中。以String str = "haha"为例子,编译器在编译时候就能确定这个haha,那么也就是说haha位于常量池里,下面我们对常量池进行下理解。
首先方法区保存的是唯一的元素,那么常量随着.class文件走,那么class文件存储于方法区,至于new 的String也就不难理解了,是将value指向了常量池,那么也就是说常量池里面的都是唯一元素,那么常量池也应该在方法区,不过根据深入java虚拟机的那段引用,haha这个字符串在常量池中的CONSTANT_STRING_INFO表中存储,常量池属于类型信息的一部分,类型信息位于方法区,而方法区在jvm内存模型中的堆中由JVM类分配。所以,haha值存在于堆空间。

上面这段话,出自"深入jVM"。看到这些。我表示,我完全不淡定了。到底应该在哪呢?请顺便贴出你的引用{:soso_e113:}
作者: 舒远    时间: 2012-12-10 09:42
http://java.chinaitlab.com/base/805952.html
这篇博文应该讲的很清楚了。。我理解了。你理解了么?
作者: 王阳    时间: 2012-12-10 22:29
舒远 发表于 2012-12-10 09:42
http://java.chinaitlab.com/base/805952.html
这篇博文应该讲的很清楚了。。我理解了。你理解了么? ...

呵呵,我们从QQ讨论到这来了,链接的内容看懂了,但是链接里面的意思应该就是常量池位于方法区内,方法区和堆独立存在,那么就是说,深入JVM那本书那块写错了? 但是有什么来证明呢?
作者: 舒远    时间: 2012-12-10 22:35
我看过老毕画的图。。栈,堆,方法区都是独立画的。。没有谁包含谁的关系。。我想方法区应该独立于堆的。。
作者: 王阳    时间: 2012-12-11 20:49
舒远 发表于 2012-12-10 22:35
我看过老毕画的图。。栈,堆,方法区都是独立画的。。没有谁包含谁的关系。。我想方法区应该独立于堆的。。 ...

哦。我再去看看视频去。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2