咨询电话(微信)18570606111
堆和栈的区别是什么?大学计算机课程里堆和栈的区别你知道吗
发布时间:2020-10-07 10:29:49   
堆和栈的区别主要有五大点,分别是:
 
  1.申请方式的不同。栈由系统自动分配,而堆是人为申请开辟;
 
  2.申请大小的不同。栈获得的空间较小,而堆获得的空间较大;
 
  3.申请效率的不同。栈由系统自动分配,速度较快,而堆一般速度比较慢;
 
  4.存储内容的不同。栈在函数调用时,函数调用语句的下一条可执行语句的地址第一个进栈,然后函数的各个参数进栈,其中静态变量是不入栈的。而堆一般是在头部用一个字节存放堆的大小,堆中的具体内容是人为安排;
 
  5.底层不同。栈是连续的空间,而堆是不连续的空间。
JVM内存的划分有五片:
 
       1.   寄存器;
 
       2.   本地方法区;
 
       3.   方法区;
 
       4.   栈内存;
 
       5.   堆内存。
 
       我们重点来说一下堆和栈:
 
       栈内存:栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。
 
       堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取。
 

  • 上一篇:泰国的曼谷大学怎么样?有哪些热门专业?
  • 下一篇:蔺怎么读?蔺是什么意思?
  • 精彩推荐
    新闻资讯
    留学顾问
    • 留学咨询
      陈老师
    
    Copyright © 2021 湖南秋橙信息科技有限公司 泰国留学-曼谷大学
    本站为免费浏览网站,便于有意向去泰国留学的学生更清楚了解相关政策等信息,欢迎泰国留学生、泰国留学机构投稿. 声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请联系客服通知我们,我们会及时删除。 湘ICP备13004166号-7