栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA中堆和栈的区别[面试常问点一]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA中堆和栈的区别[面试常问点一]

概念

堆内存:在java虚拟jvm中堆内存主要是存储数组和对象(当然数组也是对象),只要是通过new关键字创建的对象都是在堆中,而堆中存放的就是对象的实体,实体用来封装数据的,封装对象的属性,所以堆内存中的对象的存活时间是比较长的,只有没有程序去引用对象时候,才会通过Java自带的垃圾回收机制收取,堆内存中对象的存储具有先进先出的特点。

栈内存:栈内存主要存储的是基本数据类型,局部变量,引用实例变量等,其具有先进后出的特点,变量都有自己的作用域,而当变量离开自己的作用域就会被释放,所以栈内存中更新速度比较快。

区别

1.栈内存存储的是局部变量而堆内存存储的是实体;
2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;
3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。
4.栈:
栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。
堆:堆内存中的对象对所有线程可见。堆内存中的对象可以被所有线程访问。
5.栈的内存要远远小于堆内存,如果你使用递归的话,那么你的栈很快就会充满。如果递归没有及时跳出,很可能发生StackOverFlowError问题。
你可以通过-Xss选项设置栈内存的大小。-Xms选项可以设置堆的开始时的大小,-Xmx选项可以设置堆的最大值。

补充:分析堆内存和栈内存使用,有的时候可以用来做JVM调优。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749009.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号