Java中堆内存和栈内存的区别


JVM将内存空间分为两部分:栈和堆。栈主要用于存储方法执行顺序和局部变量。

栈总是按照后进先出 (LIFO) 的顺序存储块,而堆内存使用动态分配来分配和释放内存块。

分配给堆的内存会在以下事件之一发生时释放:

  • 程序终止
  • 内存释放

相反,分配给栈的内存会在函数返回时释放。以下是它们的区别。

序号关键点堆内存
1
基本
栈内存用于存储生命周期很短的项,例如局部变量、对象的引用变量
堆内存用于存储对象和JRE类。
2
排序
栈总是按照后进先出 (LIFO) 的顺序保留
堆内存是动态分配的,没有固定的内存块分配和释放模式
3
大小
可以使用JVM参数 -XSS 增加栈内存大小
可以使用JVM选项 -Xms 和 -Xmx 增加或减少堆内存大小
4
可见性
变量仅对拥有它的线程可见
对所有线程可见
5
异常
JVM将抛出java.lang.StackOverFlowError
JVM将抛出java.lang.OutOfMemoryError

更新于:2019年11月18日

6000+ 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告