锁定老帖子 主题:Java堆.栈和常量池 笔记
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-06
最后修改:2010-10-15
今天复习了一下这些知识,顺便做了下笔记. String s1 = "china"; String s2 = "china"; String s3 = "china"; String ss1 = new String("china"); String ss2 = new String("china"); String ss3 = new String("china");
这里解释一下黄色这3个箭头,对于通过new产生一个字符串(假设为”china”)时,会先去常量池中查找是否已经有了”china”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”china”对象的拷贝对象。这也就是有道面试题:String s = new String(“xyz”);产生几个对象?一个或两个,如果常量池中原来没有”xyz”,就是两个。
int i1 = 9; int i2 = 9; int i3 = 9; public static final int INT1 = 9; public static final int INT2 = 9; public static final int INT3 = 9;
class BirthDate { private int day; private int month; private int year; public BirthDate(int d, int m, int y) { day = d; month = m; year = y; } 省略get,set方法……… } public class Test{ public static void main(String args[]){ int date = 9; Test test = new Test(); test.change(date); BirthDate d1= new BirthDate(7,7,1970); } public void change1(int i){ i = 1234; }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-06
老大 写两句话不行吗? 整3张图真闹心 堆-->对象的引用 栈-->对象值 常量池-->常量值,类变量,etc...
|
|
返回顶楼 | |
发表时间:2010-04-06
常量池要是真的是这么简单就好了。。。。
把常量池看成一个索引表,这里存放的常量和我们程序里面的常量差别很大。。。。。 基础类型 在JVM内部 没有引用一说,栈里面存的就是值。 |
|
返回顶楼 | |
发表时间:2010-04-06
narcissusoyf 写道 常量池要是真的是这么简单就好了。。。。
把常量池看成一个索引表,这里存放的常量和我们程序里面的常量差别很大。。。。。 基础类型 在JVM内部 没有引用一说,栈里面存的就是值。 我也是通过看书和我的理解写的,不对的地方大家多多指正。 |
|
返回顶楼 | |
发表时间:2010-04-07
这个常量池仅仅是对字符串来用的吧, 那就加上个定语. 字符串的池化.
JVM中的加载到内存的类型信息中也包含个叫"常量池"的东西,这个里面比较丰富,字符串的直接值,原型类型的直接值,不过这些并不是它最大的意义,它最重要的是保存符号引用, 符号引用本身也是字符串值.Java是动态链接,在运行时会将这些符号引用解析成本地的直接引用. |
|
返回顶楼 | |
发表时间:2010-04-07
我觉得还是不错的知识 学到啦一些我不关注的东西
|
|
返回顶楼 | |
发表时间:2010-04-07
关于栈不要太笼统,准确地应该为执行代码的所在工作线程的stack,线程的stack大小可以通过Xss参数指定;至于heap则是共享,可以通过Xmx来设置
|
|
返回顶楼 | |
发表时间:2010-04-07
meiowei 写道 老大 写两句话不行吗? 整3张图真闹心 堆-->对象的引用 栈-->对象值 常量池-->常量值,类变量,etc...
丫的人家积极的解释,你这么刺激人家,还两句话就行了,最关键是你写了三句话还错了两句 堆-->对象的引用 栈-->对象值 谁告诉你堆里放引用的,又有谁告诉你栈里放对象值的,知道你是笔误,但是笔误都误称这样。 别乱讲来误人子弟。 再说了,对于不了解的人,你这么几句话你觉得别人能理解吗? |
|
返回顶楼 | |
发表时间:2010-04-07
sanfayin 写道 meiowei 写道 老大 写两句话不行吗? 整3张图真闹心 堆-->对象的引用 栈-->对象值 常量池-->常量值,类变量,etc...
丫的人家积极的解释,你这么刺激人家,还两句话就行了,最关键是你写了三句话还错了两句 堆-->对象的引用 栈-->对象值 谁告诉你堆里放引用的,又有谁告诉你栈里放对象值的,知道你是笔误,但是笔误都误称这样。 别乱讲来误人子弟。 再说了,对于不了解的人,你这么几句话你觉得别人能理解吗? 那位仁兄太误人子弟了,当我看到“堆-->对象的引用 栈-->对象值 ”时,我都开始怀疑我之前学的知识了。 |
|
返回顶楼 | |
发表时间:2010-04-07
楼主认真,感谢
|
|
返回顶楼 | |