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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何羡玉 中级黑马   /  2013-4-22 08:30  /  1966 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何羡玉 于 2013-4-22 10:39 编辑

栈内存和堆内存以及方法区的最大区别,求他们各自在虚拟机里的作用

8 个回复

倒序浏览
本帖最后由 丘凤光 于 2013-4-22 08:58 编辑

区别就是存储的东西不同,释放资源的形式不同。在虚拟机的作用主要是存储资源。
一般记住他们存储的内容就行了

栈内存:基本类型的变量和对象的引用变量————资源会被java自动释放掉
堆:存放new出来的对象和数组————资源会被垃圾回收器释放
方法:每个Class字节码,常量池、字段描述、方法描述等
静态区:存放静态变量,字符串常量
回复 使用道具 举报
还有一个问题啊  就是为什么对象一般用完就会消失,如果对象消失了,那之前调用的方法或者对象所做的事情还会存在内存中吗
回复 使用道具 举报
何羡玉 发表于 2013-4-22 08:55
还有一个问题啊  就是为什么对象一般用完就会消失,如果对象消失了,那之前调用的方法或者对象所做的事情还 ...

堆内存中的对象超过了他的作用域范围了(一般也就是和这个对象有关的事件结束了),事件不存在了但是对象还存在,不像栈内存中的资源用完就自动释放,对象是由垃圾回收器在某个时间自动回收的
回复 使用道具 举报
Akm 黑马帝 2013-4-22 09:03:09
报纸

回复 使用道具 举报
@刘胜寒
回复 使用道具 举报
栈内存引用对象指向堆内存,栈内存在使用完成后自动释放资源
回复 使用道具 举报
栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类 型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
堆内存一般用于存放不放在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
回复 使用道具 举报
何羡玉 发表于 2013-4-22 08:55
还有一个问题啊  就是为什么对象一般用完就会消失,如果对象消失了,那之前调用的方法或者对象所做的事情还 ...

新建的对象放在堆里,用完后java的垃圾收集器会自动收走这些不再使用的数据,之前调用的方法或者对象所做的事情在栈内存中会自动释放掉。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马