s*s
2 楼
fyi.
f*n
4 楼
yes. Arrays are objects. Objects are all dynamically allocated on the heap.
s*n
5 楼
窗户感觉漏风,
地毯有些地方有明显的分割线,并且凸起。
现在想让建商修
英文怎么说?
地毯有些地方有明显的分割线,并且凸起。
现在想让建商修
英文怎么说?
F*X
13 楼
我是 Java 新手,也在学习中,我也来说2句。
例子:int[] numberArryExample = new int[];
1)"numberArryExample" on the stack
2)"new int[]" on the heap (上面 convergence (Rex) 已经提到了这点,keyword
是"new")
例子:int[] numberArryExample = new int[];
1)"numberArryExample" on the stack
2)"new int[]" on the heap (上面 convergence (Rex) 已经提到了这点,keyword
是"new")
g*g
18 楼
z*3
22 楼
在stack里面的是地址或者原始数据类型
如果把所有数据都放在stack里面放不下
只能放下一些简单的数字
所以对于类这种尾巴大的东西
在stack里面保存一个地址
然后真正要用的时候就从stack里面取出地址
然后在heap中找到后再用
所以所有的对象都在heap里面
除非你不把它定义成类的对象
Integer i = new Integer(2);
这个就有在heap里面创建对象
int i = 2;这个就没有在heap里面创建对象
另外这个引申了之后是==和equals的差别
==比较的是stack里面的数据是否相同
equals要override,一般来说是判断heap里面每一块的数据是否相同
再高级一点是String特殊对象的对象池
然后就是1.5的autoboxing,int i = new Integer(2);
这种方式的使用,不明确区分原始数据类型及其包装类
【在 s****s 的大作中提到】
: 为什么instance variable在heap, 其它variable就不在吗?
:
: on
如果把所有数据都放在stack里面放不下
只能放下一些简单的数字
所以对于类这种尾巴大的东西
在stack里面保存一个地址
然后真正要用的时候就从stack里面取出地址
然后在heap中找到后再用
所以所有的对象都在heap里面
除非你不把它定义成类的对象
Integer i = new Integer(2);
这个就有在heap里面创建对象
int i = 2;这个就没有在heap里面创建对象
另外这个引申了之后是==和equals的差别
==比较的是stack里面的数据是否相同
equals要override,一般来说是判断heap里面每一块的数据是否相同
再高级一点是String特殊对象的对象池
然后就是1.5的autoboxing,int i = new Integer(2);
这种方式的使用,不明确区分原始数据类型及其包装类
【在 s****s 的大作中提到】
: 为什么instance variable在heap, 其它variable就不在吗?
:
: on
p*2
35 楼
好像不是。zhaoce是回答上边的问题的。感觉意思是说如果ref和val都放在heap里就慢
了。因为上边的问题是问为什么val在heap,ref在stack。
【在 t***a 的大作中提到】
: 为啥stack查找快?
: 为啥heap大而慢?
: 在stack的variable table里的要么是primitive value,要么是reference value,这
: 个table应该不会大,于是就查找快?我觉得stack里就是个变量数组而已,慢是慢不了
: ,可是也不能说就小而快了吧
: 如果是reference value的话,拿着这个ref value去heap里找instance,因为heap比
: stack空间大,会慢。赵老师是这个意思么?
t*a
37 楼
c++中
void foo(){
A a; //a在stack中,如果foo结束,a就销毁
A* a = new A; //foo结束,a指向的东西还在, 所以你需要delete a在其他什么地方
}
java中
void foo(){
A a = new A(); //a只是个reference, 在stack中,a指向的instance在heap中。如
果foo结束了,销毁的只是这个ref。如果再没有任何ref指向new A()出来的这个
instance, GC会在以后的某个时间自动销毁instance
}
所以其实没啥大差别。。。。。一个自动档,一个手动挡。。。
的.
【在 s****s 的大作中提到】
: 这些make sense, 但有的地方是有点奇怪.
: 我在java方面还是门外汉, 再等等吧.
: 奇怪的地方是,local的话, new 一个东西,肯定是放在heap.我印象中c++是这样一来的.
: 不知道有人证实一下? 那java的变化也太大了.
void foo(){
A a; //a在stack中,如果foo结束,a就销毁
A* a = new A; //foo结束,a指向的东西还在, 所以你需要delete a在其他什么地方
}
java中
void foo(){
A a = new A(); //a只是个reference, 在stack中,a指向的instance在heap中。如
果foo结束了,销毁的只是这个ref。如果再没有任何ref指向new A()出来的这个
instance, GC会在以后的某个时间自动销毁instance
}
所以其实没啥大差别。。。。。一个自动档,一个手动挡。。。
的.
【在 s****s 的大作中提到】
: 这些make sense, 但有的地方是有点奇怪.
: 我在java方面还是门外汉, 再等等吧.
: 奇怪的地方是,local的话, new 一个东西,肯定是放在heap.我印象中c++是这样一来的.
: 不知道有人证实一下? 那java的变化也太大了.
F*X
38 楼
我是这样子理解的,我先说我对 local variable 的定义:就是那些在 method 下面 (
包括 main, parameter,etc)而在 object 前面或者不再 object 里面的都是 local
variable 。当你要 new 就是要用的 object 了,就没有 local variable。自己的看
书心得,大家发现我的错误请更正一下。
的.
【在 s****s 的大作中提到】
: 这些make sense, 但有的地方是有点奇怪.
: 我在java方面还是门外汉, 再等等吧.
: 奇怪的地方是,local的话, new 一个东西,肯定是放在heap.我印象中c++是这样一来的.
: 不知道有人证实一下? 那java的变化也太大了.
包括 main, parameter,etc)而在 object 前面或者不再 object 里面的都是 local
variable 。当你要 new 就是要用的 object 了,就没有 local variable。自己的看
书心得,大家发现我的错误请更正一下。
的.
【在 s****s 的大作中提到】
: 这些make sense, 但有的地方是有点奇怪.
: 我在java方面还是门外汉, 再等等吧.
: 奇怪的地方是,local的话, new 一个东西,肯定是放在heap.我印象中c++是这样一来的.
: 不知道有人证实一下? 那java的变化也太大了.
t*a
39 楼
s*s
40 楼
这样理解就是自己给自己添麻烦.
local也好, global也好,还有auto什么的, 主要理解就是生存周期.
local生存周期短, 用完就没, 所以放在stack.
其它的生存周期长, 需要保存, 想放在stack都不行, 必须得放heap.
用这个准则, 再去理解什么instance variable, method variabl就很清楚了, 也不用
去记.
(
local
【在 F*******X 的大作中提到】
: 我是这样子理解的,我先说我对 local variable 的定义:就是那些在 method 下面 (
: 包括 main, parameter,etc)而在 object 前面或者不再 object 里面的都是 local
: variable 。当你要 new 就是要用的 object 了,就没有 local variable。自己的看
: 书心得,大家发现我的错误请更正一下。
:
: 的.
local也好, global也好,还有auto什么的, 主要理解就是生存周期.
local生存周期短, 用完就没, 所以放在stack.
其它的生存周期长, 需要保存, 想放在stack都不行, 必须得放heap.
用这个准则, 再去理解什么instance variable, method variabl就很清楚了, 也不用
去记.
(
local
【在 F*******X 的大作中提到】
: 我是这样子理解的,我先说我对 local variable 的定义:就是那些在 method 下面 (
: 包括 main, parameter,etc)而在 object 前面或者不再 object 里面的都是 local
: variable 。当你要 new 就是要用的 object 了,就没有 local variable。自己的看
: 书心得,大家发现我的错误请更正一下。
:
: 的.
s*s
42 楼
这个例子好,我就抛砖引玉,大家一起来讨论:
void foo(){
int *p; // 1. p 在stack还是heap?
M *m; // 2. m 在stack还是heap?
p = new int[20]; //3. p 在stack还是heap?
m = new M(); //4. p 在stack还是heap?
int *p1 = new int[20];//5. p1 在stack还是heap?
M *m1 = new M(); //6 .m1 在stack还是heap?
int *p2 = NULL;//7. p2 在stack还是heap?
M *m2 = NULL;//8, m2 在stack还是heap?
}
大家直接给出1, 2,3 ,4, 5, 6, 7,8 的答案吧. 免得我更糊涂.
地方
【在 t***a 的大作中提到】
: c++中
: void foo(){
: A a; //a在stack中,如果foo结束,a就销毁
: A* a = new A; //foo结束,a指向的东西还在, 所以你需要delete a在其他什么地方
: }
: java中
: void foo(){
: A a = new A(); //a只是个reference, 在stack中,a指向的instance在heap中。如
: 果foo结束了,销毁的只是这个ref。如果再没有任何ref指向new A()出来的这个
: instance, GC会在以后的某个时间自动销毁instance
void foo(){
int *p; // 1. p 在stack还是heap?
M *m; // 2. m 在stack还是heap?
p = new int[20]; //3. p 在stack还是heap?
m = new M(); //4. p 在stack还是heap?
int *p1 = new int[20];//5. p1 在stack还是heap?
M *m1 = new M(); //6 .m1 在stack还是heap?
int *p2 = NULL;//7. p2 在stack还是heap?
M *m2 = NULL;//8, m2 在stack还是heap?
}
大家直接给出1, 2,3 ,4, 5, 6, 7,8 的答案吧. 免得我更糊涂.
地方
【在 t***a 的大作中提到】
: c++中
: void foo(){
: A a; //a在stack中,如果foo结束,a就销毁
: A* a = new A; //foo结束,a指向的东西还在, 所以你需要delete a在其他什么地方
: }
: java中
: void foo(){
: A a = new A(); //a只是个reference, 在stack中,a指向的instance在heap中。如
: 果foo结束了,销毁的只是这个ref。如果再没有任何ref指向new A()出来的这个
: instance, GC会在以后的某个时间自动销毁instance
F*n
43 楼
JVM实际上只有5种类型,int, float, long, double, reference/address
不管哪中类型只要出现在 code statement (包括 method parameter)里就在Stack上
而reference 指向的类数据肯定在 heap 上
所以类的成员变量不管啥类型也在 heap 上
另外JVM的Stack 和 Heap都是抽象的,具体实现可以乱搞
【在 s****s 的大作中提到】
: 这个例子好,我就抛砖引玉,大家一起来讨论:
: void foo(){
: int *p; // 1. p 在stack还是heap?
: M *m; // 2. m 在stack还是heap?
: p = new int[20]; //3. p 在stack还是heap?
: m = new M(); //4. p 在stack还是heap?
: int *p1 = new int[20];//5. p1 在stack还是heap?
: M *m1 = new M(); //6 .m1 在stack还是heap?
: int *p2 = NULL;//7. p2 在stack还是heap?
: M *m2 = NULL;//8, m2 在stack还是heap?
不管哪中类型只要出现在 code statement (包括 method parameter)里就在Stack上
而reference 指向的类数据肯定在 heap 上
所以类的成员变量不管啥类型也在 heap 上
另外JVM的Stack 和 Heap都是抽象的,具体实现可以乱搞
【在 s****s 的大作中提到】
: 这个例子好,我就抛砖引玉,大家一起来讨论:
: void foo(){
: int *p; // 1. p 在stack还是heap?
: M *m; // 2. m 在stack还是heap?
: p = new int[20]; //3. p 在stack还是heap?
: m = new M(); //4. p 在stack还是heap?
: int *p1 = new int[20];//5. p1 在stack还是heap?
: M *m1 = new M(); //6 .m1 在stack还是heap?
: int *p2 = NULL;//7. p2 在stack还是heap?
: M *m2 = NULL;//8, m2 在stack还是heap?
t*a
44 楼
有c/c++版么。。。。。。。c++水太深了,谁知道它咋整的
【在 s****s 的大作中提到】
: 这个例子好,我就抛砖引玉,大家一起来讨论:
: void foo(){
: int *p; // 1. p 在stack还是heap?
: M *m; // 2. m 在stack还是heap?
: p = new int[20]; //3. p 在stack还是heap?
: m = new M(); //4. p 在stack还是heap?
: int *p1 = new int[20];//5. p1 在stack还是heap?
: M *m1 = new M(); //6 .m1 在stack还是heap?
: int *p2 = NULL;//7. p2 在stack还是heap?
: M *m2 = NULL;//8, m2 在stack还是heap?
【在 s****s 的大作中提到】
: 这个例子好,我就抛砖引玉,大家一起来讨论:
: void foo(){
: int *p; // 1. p 在stack还是heap?
: M *m; // 2. m 在stack还是heap?
: p = new int[20]; //3. p 在stack还是heap?
: m = new M(); //4. p 在stack还是heap?
: int *p1 = new int[20];//5. p1 在stack还是heap?
: M *m1 = new M(); //6 .m1 在stack还是heap?
: int *p2 = NULL;//7. p2 在stack还是heap?
: M *m2 = NULL;//8, m2 在stack还是heap?
w*z
45 楼
stack is with the thread, heap is global to the process/ jvm . you can set
the size for both through jvm startup parameter .
【在 s****s 的大作中提到】
: 这样理解就是自己给自己添麻烦.
: local也好, global也好,还有auto什么的, 主要理解就是生存周期.
: local生存周期短, 用完就没, 所以放在stack.
: 其它的生存周期长, 需要保存, 想放在stack都不行, 必须得放heap.
: 用这个准则, 再去理解什么instance variable, method variabl就很清楚了, 也不用
: 去记.
:
: (
: local
the size for both through jvm startup parameter .
【在 s****s 的大作中提到】
: 这样理解就是自己给自己添麻烦.
: local也好, global也好,还有auto什么的, 主要理解就是生存周期.
: local生存周期短, 用完就没, 所以放在stack.
: 其它的生存周期长, 需要保存, 想放在stack都不行, 必须得放heap.
: 用这个准则, 再去理解什么instance variable, method variabl就很清楚了, 也不用
: 去记.
:
: (
: local
n*e
46 楼
我的理解, 所有这些variables都在stack上面。因为这些都是local variables。
这些指针所指向的object在heap上面。
C++里面需要人为的delete这些allocated memory space, 否则会产生memory leakage.
Java是通过GC来自动的回收这些allocated memory space。
【在 s****s 的大作中提到】
: 这个例子好,我就抛砖引玉,大家一起来讨论:
: void foo(){
: int *p; // 1. p 在stack还是heap?
: M *m; // 2. m 在stack还是heap?
: p = new int[20]; //3. p 在stack还是heap?
: m = new M(); //4. p 在stack还是heap?
: int *p1 = new int[20];//5. p1 在stack还是heap?
: M *m1 = new M(); //6 .m1 在stack还是heap?
: int *p2 = NULL;//7. p2 在stack还是heap?
: M *m2 = NULL;//8, m2 在stack还是heap?
这些指针所指向的object在heap上面。
C++里面需要人为的delete这些allocated memory space, 否则会产生memory leakage.
Java是通过GC来自动的回收这些allocated memory space。
【在 s****s 的大作中提到】
: 这个例子好,我就抛砖引玉,大家一起来讨论:
: void foo(){
: int *p; // 1. p 在stack还是heap?
: M *m; // 2. m 在stack还是heap?
: p = new int[20]; //3. p 在stack还是heap?
: m = new M(); //4. p 在stack还是heap?
: int *p1 = new int[20];//5. p1 在stack还是heap?
: M *m1 = new M(); //6 .m1 在stack还是heap?
: int *p2 = NULL;//7. p2 在stack还是heap?
: M *m2 = NULL;//8, m2 在stack还是heap?
x*d
47 楼
i didn't read the whole thread. But guys, can you pickup a preparation book
for oracle/sun certified java developer exam? It is summarized very clear in
that book, what is in the heap and what is in the stack.
that is why I advocate scjp exam for all java developers.
Another recommendation, read ibm article, from java code to java heap,
google it.
for oracle/sun certified java developer exam? It is summarized very clear in
that book, what is in the heap and what is in the stack.
that is why I advocate scjp exam for all java developers.
Another recommendation, read ibm article, from java code to java heap,
google it.
J*o
48 楼
扣的好细呀
相关阅读
急问hibernater query请教个html显示utf8 string的问题 (转载)Good News发现 java.net 比 sf.net 好AJAX collection请问godaddy.com所谓的支持Java是支持jsp吗?servlet支持吗?EJ想找个java的高手Hibernate queryJava有类似于XAML的咚咚么?java为啥这么多frameworkWhere can I download the textbook for SCJP 5.0 exam?想自学J2EEJFrame怎么设定窗口为隐藏?JFrame怎么设定ontop如何做这样的Animation刚才笔记本上装了Netbeans5.0, 但启动得时侯怎么特别慢呢?java(1.4.2) threads: out of memory errorjava的接口runnableAbout TreeMap in Javaan easy question