gpt4 book ai didi

java - 堆外内存和栈内存是一样的吗?

转载 作者:行者123 更新时间:2023-11-29 04:20:10 25 4
gpt4 key购买 nike

我知道堆栈内存和堆内存之间的区别,但是在很多博客中我都遇到过这个词 off-heap memory。我浏览了很多博客和 youtube 视频,想知道堆外内存和堆栈内存之间是否有任何关系?根据这个question的流行答案,我可以理解为堆外内存是指由EHCache管理的存储对象,不受垃圾收集的影响。这个定义是完美的,但我的问题是,堆外内存是否与堆栈内存相同,或者它们一起是内存管理中的不同实体?

编辑:如果它们不相同,有人可以通过一些基本解释详细解释它们的不同之处。我对 Java 内存管理很陌生。

最佳答案

它们不一样。

区别:

  • 堆栈内存被组织为跟踪方法调用生命周期的堆栈,但堆外内存不是
  • 堆栈内存在方法被调用和返回时隐式分配和释放12,但堆外内存通过(通常)调用分配和释放 native 代码。

这就是典型的 Java 开发人员需要了解的全部内容。如果您想深入挖掘,请查看 OpenJDK 源代码。


1 - 堆栈本身由 Thread.start() 隐式分配并在线程终止时释放。它们是堆外内存的一种形式,但需要从操作系统请求它们以实现通常用于检测堆栈溢出的“红色区域”......

2 - 这忽略了一个事实,即启用“逃逸分析”时,JIT 可能会生成将本地对象分配到堆栈上的代码。如果发生这种情况,那么堆栈内存的名义分配和释放可能会在方法调用中发生。

关于java - 堆外内存和栈内存是一样的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49880360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com