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

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

堆栈始终按照LIFO顺序存储块,而堆内存使用动态分配来分配和取消分配内存块。 

分配给堆的内存将一直存在,直到发生以下事件之一:

  • 程序终止 

  • 无记忆 

相反,分配给堆栈的内存一直存在,直到函数返回。以下是区别。

序号叠放堆内存
1
基本的
堆栈存储器用于存储寿命很短的项目,例如局部变量,对象的引用变量 
堆内存分配给存储对象和JRE类。
2
订购方式 
堆栈始终按LIFO(后进先出)顺序保留
堆内存是动态分配,没有固定的模式可以在内存中分配和取消分配块 
3
尺寸
我们可以使用JVM参数-XSS增加堆栈内存大小
我们可以使用JVM选项-Xms和-Xmx来增加或减少堆内存的大小。
4
能见度 
变量仅对所有者线程可见 
所有线程均可见 
  5 
例外
JVM将抛出java.lang.StackOverFlowError
JVM将抛出java.lang.OutOfMemoryError