gpt4 book ai didi

java - JVM 的实际内存分配以及它们有何不同?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:53:54 27 4
gpt4 key购买 nike

这可能看起来有很多问题,但它们都是相互关联的。我有点困惑,因为堆空间分配在哪里,堆栈内存位于哪里?
如果两者都存在于主内存中,那么为什么说栈内存更容易访问,为什么我们不能在栈内存中分配对象?
由于类存储在 PermGen 中,这个空间分配在哪里,它与堆空间有何不同,常量字符串存储在哪里?

最佳答案

  1. “堆和栈分配在哪里?” accepted answer to this question covers this.每个线程都有自己的堆栈,它们都共享一个堆。操作系统控制堆栈和堆项的确切内存位置,并且它会有所不同。
  2. “为什么堆栈内存更容易访问”每个线程都有自己的堆栈,因此并发问题较少。堆栈和堆都可以缓存在 L1, L2, and L3 portions of the memory hierarchy 中,所以我不同意丹尼尔在这里的回答。真的,我不会说一种内存比另一种特别容易访问。
  3. “为什么我们不能在堆栈内存中分配对象?”这是 JVM 做出的设计决定。在 C/C++ 等其他语言中,您可以在堆栈上分配对象。一旦你从分配那个 stack frame 的函数返回这样的对象丢失了。 C/C++ 程序中常见的错误来源是共享指向此类堆栈分配对象的指针。我敢打赌这就是 JVM 设计者做出此选择的原因,尽管我不确定。
  4. PermGen 是堆中的另一 block 。常量字符串在 JVM 的生命周期内存储在这里。它is garbage collected just like the rest of the heap.

关于java - JVM 的实际内存分配以及它们有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8000577/

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