JVM将内存空间分为两部分,一个是堆栈,另一个是堆空间。堆栈空间主要用于存储方法执行的顺序和局部变量。
堆栈始终按照LIFO顺序存储块,而堆内存使用动态分配来分配和取消分配内存块。
分配给堆的内存将一直存在,直到发生以下事件之一:
程序终止
无记忆
相反,分配给堆栈的内存一直存在,直到函数返回。以下是区别。
序号 | 键 | 叠放 | 堆内存 |
---|---|---|---|
1 | 基本的 | 堆栈存储器用于存储寿命很短的项目,例如局部变量,对象的引用变量 | 堆内存分配给存储对象和JRE类。 |
2 | 订购方式 | 堆栈始终按LIFO(后进先出)顺序保留 | 堆内存是动态分配,没有固定的模式可以在内存中分配和取消分配块 |
3 | 尺寸 | 我们可以使用JVM参数-XSS增加堆栈内存大小 | 我们可以使用JVM选项-Xms和-Xmx来增加或减少堆内存的大小。 |
4 | 能见度 | 变量仅对所有者线程可见 | 所有线程均可见 |
5 | 例外 | JVM将抛出java.lang.StackOverFlowError | JVM将抛出java.lang.OutOfMemoryError |