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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李斌 于 2012-5-24 22:08 编辑

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

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

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

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

回答的形象 具体 (最好是有图上)  有金币送哦  嘿嘿~~

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览

回帖奖励 +2

本帖最后由 林豪 于 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

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报

回帖奖励 +2

本帖最后由 贾旭 于 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, 下载次数: 35)

内存.png

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
应该是在内存的方法区中吧 记得在其他视频上看过。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马