大家都在搜

内存堆和栈的区别(浅谈内存中堆和栈)

一、JVM内存的划分

Java程序在运行时要在内存中开辟一片内存区域,虚拟机中每一片内存处理的方式都不同,需要单独进行管理。

JVM内存分为五部分:

1)寄存器

2)本地方法区

3)方法区

4)栈内存

5)堆内存

二、栈内存和堆内存

栈内存:

栈内存储局部变量,即定义在方法中的变量都是局部变量(方法外的是全局变量)。加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。

堆内存:

存储的是对象,凡是new建立的对象都是在堆中。如果一个数据消失,这个实体也没有消失,所以堆是不会随时释放的。堆里的实体虽然不会被释放,但是会被当成垃圾,垃圾回收机制会不定时的收取。

三、堆和栈的联系

接下来我们举个例子来说明下:

int [] arr=new int [10]

当执行主函数中的这行代码的啥时候,主函数先进栈,在栈中定义一个变量arr。

同时堆里通过new关键字开辟一个空间,内存在存储数据的时候都是通过地址来体现的,然后给变量arr分配一个指向开辟空间的内存地址。arr就通过地址指向了数组。arr想操纵数组时,就需要通过地址来操控。

四、堆与栈的区别

1)栈内存存储的是局部变量,而堆内存存储的是对象

2)栈内存存放的变量生命周期一旦结束就会被释放,更新速度快。而堆内存存放的对象会被垃圾回收机制不定时的回收,更新速度慢。


版权声明:本文内容由互联网用户自发贡献以及网络收集编辑和原创所得,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任,详见本站的版权声明与免责声明。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。 转载请注明出处:https://www.yzjzlsb.com/tgfx/12672.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~