堆和栈的区别

不想读书的c某人 2019-04-11 08:45:24
JVM内存的划分有五块 1.寄存器 2.本地方法区 3.方法区 4.栈内存 5.堆内存 栈:基本数据变量和局部变量都是存放在栈中的,以及main方法等方法也是存放在栈中的,用完即消失。 堆:用于存放new出来的对象以及数组。 对于栈来说很好理解,用完即释放。 但对于堆来说,以数组来举例 int【】x=new int【3】,x【0】=20,x=null 1.首先在栈中开辟一个空间用于存放x变量。 2.在堆中开辟一个空间用于存放new int【3】。 3.将new int【3】的首地址赋值给栈中的x,这样x即指向了堆内存中的数组。此时默认x【0】,x【1】,x【2】都为0. 4.在堆内存中将x【0】赋值为20 5.接下来执行x=null,null表示空值,即x的引用地址被回收,当堆中的数组无用时,jum会启动垃圾回收机制,不定时自动删除。 注意:假设Car是一个类,new了一个car1 ,再Car car2=car1;此时car1和car2的两个内存地址一样,所以当car1的属性值改变时,car2也会改变。 栈的特点 1.数据执行完毕,会被立即释放。 2.没有默认的初始化值,需要手动设置。 堆的特点 1.所有的实体类都有内存地址值。 2.堆用来封装数据,所有的都有默认的初始化的值。 3.当实体类不再被指向时,会被JVM回收机制清除。 理解有误请改成
...全文
36 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧