A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liqian 中级黑马   /  2012-4-16 18:08  /  1703 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

栈内存 堆内存 共享区 各自是在什么情况下分配的?

4 个回复

倒序浏览
栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
堆:存放所有new出来的对象。
静态域:存放静态成员(static定义的)
常量池:存放字符串常量和基本类型常量(public static final)。
回复 使用道具 举报
栈内存:在函数中定义的一些基本类型的变量和对象的引用变量都是在栈内存中定义和分配的,当某个函数被调用时,这个函数会在栈内存中申请一个空间,之后这个函数内部定义的变量,都会被分配到这个函数所申请到的栈空间,当函数运行结束时,分配给函数的栈空间被收回,在这个函数中定义的变量也随之被释放消失。
堆内存:通过new这样的关键字创建的数组或者对象都分配到堆内存中,堆内存中分配的这些内存,由java虚拟机的垃圾自动回收器来管理。
回复 使用道具 举报
基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。   
引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 。 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收。局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收。 方法调用时传入的 literal 参数,先在栈空间分配,在方法调用完成后从栈空间分配。字符串常量在 DATA 区域分配 ,this 在堆空间分配 。数组既在栈空间分配数组名称, 又在堆空间分配数组实际的大小!      
回复 使用道具 举报
岳民喜 发表于 2012-4-16 18:19
栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...

嗯 明白了!~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马