黑马程序员技术交流社区
标题:
关于内存结构的“老”问题......求围观~~~~~~~~~~~~~~~~~~~~~
[打印本页]
作者:
李斌
时间:
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)
下载附件
2012-5-24 22:34 上传
作者:
贾旭
时间:
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)
下载附件
2012-5-24 22:45 上传
作者:
杨康
时间:
2012-5-25 00:16
应该是在内存的方法区中吧 记得在其他视频上看过。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2