【看图说话】给我一块内存,我要放一只狗!
java吧
全部回复
仅看楼主
level 6
Zebe_32 楼主
关于一点点对内存中“堆”的理解,不知道是不是对的?据说java中所有new出来的东西,都是放在heap里面的。看下面这张图:
首先,Dog dog1 ,程序说:“给我一块内存,我要放一只狗!”heap正在工作,突然听到了请求,就给了程序一块空白的内存,里面什么也没装。
然后,dog1 = new Dog() ,程序弄了一只狗出来,再把这只名叫 dog1 的狗放到内存里,heap 看到了这只狗,于是把它放到了那块内存中。
很快地,程序马上弄了两只猫出来,又对heap说,“我这还有两只猫, 你给我找地方放一下。” heap 看到了,又直接给了两块内存把猫放下。
最后,程序说:“我忘了还有一只狗,麻烦你再帮我找地方放一下吧?” 于是,heap 又给了一块内存把狗放下。
2013年03月24日 08点03分 1
level 8
[打酱油]
2013年03月24日 10点03分 2
level 9
Dog dog1;
这个dog1变量是在栈里的
new Dog();
这个实例是在堆里的
也就是栈里的dog1变量存储的是新建的Dog实例在堆里的地址
2013年03月24日 10点03分 3
引用
2013年03月24日 10点03分
回复 纯金键盘 :是的 局部变量都是存放在stack里面的
2013年03月24日 11点03分
level 9
补充一下,我刚才说的是,如果Dog dog1;这句是在一个方法/函数 里面
如果定义的是成员变量,那就另说了
2013年03月24日 10点03分 4
方法 函数 是一回事,Java中主要称之为方法,也可以叫函数 其他语言有很多称之为函数,但是Java的类只关心两个问题,一是该类的属性,另一个就是该类能做什么 所以叫方法比较符合纯面向这个说法 不知道对不? 在方法内部申请的空间(声明),确实是放在栈里面的,叫局部变量
2013年03月24日 11点03分
level 8
堆。栈。数据、、、
2013年03月24日 10点03分 6
level 12
[打酱油]
2013年03月24日 10点03分 7
level 14
醍醐灌顶![真棒]
2013年03月24日 10点03分 8
[钱]
2013年03月24日 11点03分
level 10
关门、放狗![揪耳朵]
2013年03月24日 10点03分 9
[汗]
2013年03月24日 11点03分
level 11
Dog dog1,这句话,没有涉及到堆,只是在栈里开了一个指针,但是这个指针的值是空的
2013年03月24日 11点03分 12
level 9
Dog dog;
这样做不会在堆里面占据内存的
new的时候 才给对象内存
2013年03月24日 14点03分 15
level 12
明白就好,,,,
2013年03月24日 14点03分 16
level 8
明白就好 明明白了
2013年03月25日 03点03分 17
1