java内存和系统内存以及栈和堆

文章目录
  1. 1.
  2. 2. 堆:

参考链接: 数据结构的堆、栈和操作系统的堆内存、栈内存的区别 - Kylen的博客 | Kylen Blog

CPU 处理数据需要 寄存器但是仅仅是寄存器是不够的还需要外部的内存支持 这个时候就需要

RAM的支持 stack 栈 ,支持push ,pop

类似于这个结构

image-20221209113726223

stack over flow

  • 就像堆一样存储在计算机 RAM 中。
  • 在堆栈上创建的变量将超出范围并自动释放。
  • 与堆上的变量相比,分配速度要快得多。
  • 使用实际的堆栈数据结构实现。
  • 存放本地数据,返回地址,用于参数传递。
  • 当使用太多堆栈时可能会发生堆栈溢出(主要来自无限或太深的递归,非常大的分配)。
  • 在堆栈上创建的数据可以在没有指针的情况下使用。
  • 如果您确切地知道在编译之前需要分配多少数据并且它不是太大,那么您将使用堆栈。
  • 通常在程序启动时已经确定了最大大小。

堆:

  • 就像堆栈一样存储在计算机 RAM 中。
  • 在 C++ 中,堆上的变量必须手动销毁并且永远不会超出范围。 使用 delete、delete[] 或 free 释- 放数据。
    与堆栈上的变量相比,分配速度较慢。
  • 按需用于分配数据块供程序使用。
  • 当有很多分配和释放时,可能会产生碎片。
  • 在 C++ 或 C 中,在堆上创建的数据将通过指针指向并分别使用 new 或 malloc 进行分配。
  • 如果请求分配的缓冲区太大,可能会出现分配失败。
  • 如果您不确切知道在运行时需要多少数据或者需要分配大量数据,则可以使用堆。
  • 负责内存泄漏。