黑马程序员技术交流社区
标题:
栈内存 堆内存 共享区
[打印本页]
作者:
liqian
时间:
2012-4-16 18:08
标题:
栈内存 堆内存 共享区
栈内存 堆内存 共享区 各自是在什么情况下分配的?
作者:
岳民喜
时间:
2012-4-16 18:19
栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
堆:存放所有new出来的对象。
静态域:存放静态成员(static定义的)
常量池:存放字符串常量和基本类型常量(public static final)。
作者:
李彬彬
时间:
2012-4-16 18:24
栈内存:在函数中定义的一些基本类型的变量和对象的引用变量都是在栈内存中定义和分配的,当某个函数被调用时,这个函数会在栈内存中申请一个空间,之后这个函数内部定义的变量,都会被分配到这个函数所申请到的栈空间,当函数运行结束时,分配给函数的栈空间被收回,在这个函数中定义的变量也随之被释放消失。
堆内存:通过new这样的关键字创建的数组或者对象都分配到堆内存中,堆内存中分配的这些内存,由java虚拟机的垃圾自动回收器来管理。
作者:
王永旺
时间:
2012-4-16 18:25
基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。
引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 。 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收。局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。 方法调用时传入的 literal 参数,先在栈空间分配,在方法调用完成后从栈空间分配。字符串常量在 DATA 区域分配 ,this 在堆空间分配 。数组既在栈空间分配数组名称, 又在堆空间分配数组实际的大小!
作者:
liqian
时间:
2012-4-16 18:29
岳民喜 发表于 2012-4-16 18:19
栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...
嗯 明白了!~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2