A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王阳 中级黑马   /  2012-12-8 13:55  /  1623 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

上面这段话,出自"深入jVM"。看到这些。我表示,我完全不淡定了。到底应该在哪呢?请顺便贴出你的引用{:soso_e113:}

4 个回复

正序浏览
舒远 发表于 2012-12-10 22:35
我看过老毕画的图。。栈,堆,方法区都是独立画的。。没有谁包含谁的关系。。我想方法区应该独立于堆的。。 ...

哦。我再去看看视频去。
回复 使用道具 举报
舒远 黑马帝 2012-12-10 22:35:43
板凳
我看过老毕画的图。。栈,堆,方法区都是独立画的。。没有谁包含谁的关系。。我想方法区应该独立于堆的。。
回复 使用道具 举报
舒远 发表于 2012-12-10 09:42
http://java.chinaitlab.com/base/805952.html
这篇博文应该讲的很清楚了。。我理解了。你理解了么? ...

呵呵,我们从QQ讨论到这来了,链接的内容看懂了,但是链接里面的意思应该就是常量池位于方法区内,方法区和堆独立存在,那么就是说,深入JVM那本书那块写错了? 但是有什么来证明呢?
回复 使用道具 举报
舒远 黑马帝 2012-12-10 09:42:45
沙发
http://java.chinaitlab.com/base/805952.html
这篇博文应该讲的很清楚了。。我理解了。你理解了么?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马