黑马程序员技术交流社区

标题: 关于内存结构的“老”问题......求围观~~~~~~~~~~~~~~~~~~~~~ [打印本页]

作者: 李斌    时间: 2012-5-24 22:07
标题: 关于内存结构的“老”问题......求围观~~~~~~~~~~~~~~~~~~~~~
本帖最后由 李斌 于 2012-5-24 22:08 编辑

复习到String ,毕老师说字符串是常量,存放在常量池中;

我的问题是:这个常量池 在内存中的哪个位置,还有 内存中还有哪些区域,

比如栈,堆,方法区,注册表,还有一些其他的东西 到底是个什么格局,相互之间有些什么关系?内存里面到底有些什么东西?

对这个内存结构 表示很晕。。。

回答的形象 具体 (最好是有图上)  有金币送哦  嘿嘿~~
作者: 林豪    时间: 2012-5-24 22:33
本帖最后由 林豪 于 2012-5-24 22:34 编辑

字符串都会放在常量池,常量池的方法区里面,这个要看JVM教程了,你只要知道在方法区就可以了
如果 String s1 = "abc"   那么s1在栈中,"abc"在常量池里,s1指向常量池的"abc"
String s2 = new String("abc");  那么 s2在栈中,s2指向堆里新开辟的String,堆里的String指向 常量池中的"abc"
为什么要有常量池?个人理解应该是享元模式,将经常用到的小元素全部放在常量池里,节省空间

未命名.jpg (10.66 KB, 下载次数: 44)

未命名.jpg

作者: 贾旭    时间: 2012-5-24 22:47
本帖最后由 贾旭 于 2012-5-24 22:53 编辑

我们需要了解的,就是这三个咯。
你抽空再看看老毕的视频,老毕画图画的一比那啥啊。

关于为什么要有常量池,简单来说吧,就是
String str1 ="abc";
String str2 ="abc";
这时,它们其实指向的是同一个“abc".
因为,每用到a,b,c就重新创建的话,会造成内存的浪费,所以,一旦用到
a了,就让str1指向a,也就是str1记录了a的内存地址值。这样就节省了空间。
我说的肯定没有老毕好,这个问题在String里的第一段视频里讲过,你可以看看。

内存.png (25.82 KB, 下载次数: 36)

内存.png

作者: 杨康    时间: 2012-5-25 00:16
应该是在内存的方法区中吧 记得在其他视频上看过。




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