首先注明一点,JVM里的堆和数据结构里的堆(heap)不是一个概念。这是面试ebay外包的时候,面试官看过我这个博客,给我纠正的错误。(因为之前的博客是把这两个堆的概念混合了。)在此感谢面试官的提醒,但是不知道你还会不会回来看我的这个博客。我说我会改的哟~
JVM里的堆:
每一个Java应用都唯一对应一个JVM实例,每一个实例唯一对应一个堆。对象的实例化就是发生在JVM里面的堆中,这里的堆也是垃圾回收的时候重要地带。
数据结构里的堆(heap):
在现实中我们通常把堆 (一种完全二叉树) 使用顺序结构的数组来存储。
JVM里的堆 | JVM里的栈 | |
---|---|---|
英文名 | heap | stack |
相关数据类型 | 包装类,如Integer,String, Double | 放基本数据类型,即int,short, long, byte, float, double, boolean, char |
缓存 | 二级缓存 生命周期是由虚拟机的垃圾回收算法来决定的 | 一级缓存 通常都是被调用时处于存储空间中,调用完毕立即释放 |
相关代码 | | |
相对速度 | 慢 | 存取速度快,仅次于直接位于CPU中的寄存器 |
变量 | new 出来的对象是在堆里 一个变量如果想跨越方法的边界,就必须创建在堆里。 | 局部变量是和方法同生共死的 |