Java中堆内存和栈内存的区别
JVM将内存空间分为两部分:栈和堆。栈主要用于存储方法执行顺序和局部变量。
栈总是按照后进先出 (LIFO) 的顺序存储块,而堆内存使用动态分配来分配和释放内存块。
分配给堆的内存会在以下事件之一发生时释放:
- 程序终止
- 内存释放
相反,分配给栈的内存会在函数返回时释放。以下是它们的区别。
序号 | 关键点 | 栈 | 堆内存 |
---|---|---|---|
1 | 基本 | 栈内存用于存储生命周期很短的项,例如局部变量、对象的引用变量 | 堆内存用于存储对象和JRE类。 |
2 | 排序 | 栈总是按照后进先出 (LIFO) 的顺序保留 | 堆内存是动态分配的,没有固定的内存块分配和释放模式 |
3 | 大小 | 可以使用JVM参数 -XSS 增加栈内存大小 | 可以使用JVM选项 -Xms 和 -Xmx 增加或减少堆内存大小 |
4 | 可见性 | 变量仅对拥有它的线程可见 | 对所有线程可见 |
5 | 异常 | JVM将抛出java.lang.StackOverFlowError | JVM将抛出java.lang.OutOfMemoryError |
广告