我知道Stack和堆内存之间的区别但是在很多博客中我都遇到过这个词off-heap
内存。我浏览了很多博客和youtube视频,看看堆外内存和堆栈内存之间是否有任何关系?
根据这个question的流行答案,我可以理解,堆外内存是指由EHCache管理并且不受垃圾收集的存储对象。这个定义是完美的,但我的问题是,堆内存是否与堆内存相同或者它们在内存管理中是一个不同的实体?
编辑: 如果它们不相同,有人可以详细解释是什么使它们与一些基本解释不同。我是java内存管理的新手。
答案 0 :(得分:3)
他们不一样。
差异:
这是典型的Java开发人员需要知道的。如果您想深入挖掘,请查看OpenJDK源代码。
1 - 堆栈本身由Thread.start()隐式分配,并在线程终止时释放。它们是堆外存储器的一种形式,但是需要从操作系统请求它们以实现通常用于检测堆栈溢出的“红区”...
2 - 这忽略了这样一个事实:当启用“转义分析”时,JIT可以生成将本地对象分配到堆栈的代码。如果发生这种情况,则在方法调用中可能会发生堆栈内存的名义分配和释放。