jvm元空间与堆和栈的区别?
1内存分配策略
1)静态存储:编译时确定每个数据目标在运行时的存储空间需求(代码中无可变数据结构无嵌套递归)。
2)栈式存储:数据需求在编译时未知,运行时模块入口确定,动态分配存储,在运行中进入一个程序模块时,必须知道该程序模块所需要的数据区的大小才能分派其内存。
3)堆式存储:编译时和运行时模块入口无法确定,动态分配。
2Java内存模型中的堆与栈
1)二者联系:引用对象、数组时栈里定义的变量保存的是堆中目标的首地址。
2)二者区别:
(1)管理方式:栈自动释放(对应方法执行完毕),堆需要GC(垃圾回收机制)
(2)空间大小:堆比栈大。
(3)碎片:栈产生的碎片远小于堆产生的碎片。
(4)分配方式:栈支持静态和动态分配,堆只能动态分配。
(5)效率:堆比栈的效率低。
(6)栈为线程私有,堆为线程共享。