写在前面
本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和文献引用请见100个问题搞定Java虚拟机
解答
JVM 中堆指的 Java 堆,栈一般特指 Java 虚拟机栈。
区别 | 堆 | 栈 |
---|---|---|
功能 | 存储Java对象 | 描述Java方法执行的内存模型 |
存储数据 | Java对象实例 | 8种基本数据类型、引用类型、returnAddress类型 |
数据销毁时间 | 视GC情况确定 | 一般方法执行结束数据自动销毁 |
线程相关 | 线程共享 | 线程私有 |
内存空间分配 | 运行时动态分配 | 编译时就已经确定 |
存储速度 | 慢 | 快 |
异常 | 如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,就会抛出OutOfMemoryError异常 | 如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackoverflowError异常;如果虚拟机栽可以动态扩展, 如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常 |
补充
有关 Java 堆和 Java 虚拟机栈请参考我的另一篇博客——JVM运行时数据区如何划分?