zoukankan      html  css  js  c++  java
  • 程序运行内存——堆和栈

               程序运行时,它的数据必须存储在内存中。一个数据项需要多大的内存、存储在什么地方、以及如何存储都依赖与该数据项的类型。

               运行整的程序使用两个内存区域来存储数据:堆和栈。

               栈:

            系统接管所有的栈的操作。作为 程序员,不需要显示的对它做任何事情。但了解栈的基本功能可以更好的了解程序在运行时正在做什么。

                栈是一个内存数组,是一个LIPO(last-in first-out,先进后出)的数据结构。栈存储的几种数据类型:

                一般值类型都存放在栈中。

                某些类型变量的值:例如int double 结构类型和枚举类型等

                程序当前的执行环境;

                传递给方法的参数。

                栈的特征:

                栈有如下几个普通特征:

                数据只能从栈顶端插入和删除;

                把数据放到站顶称为入栈(push);

                从栈顶删除数据称为出栈(pop)。

                

                   堆:

             对是一块内存区域,在队里可以分配大块的内存用于存储某些类相关的数据。与栈不同,堆里的内存可以任意存入和移除。

             接下来的图展示了一个在堆里放了4项数据的程序。

             堆里存放的类型是引用值类型:包括数组、接口、类等~

             

               虽然程序可以再堆里保存数据,但并不能显示的删除它们。CLR的自动GC(Garbage Collector,垃圾收集器)在判断出程序的代码将不会再访问某数据项时,自动清除无助的堆对象。我们因此可以不再操心这项使用其他编程语言时非常容易出错的工作了。

               此图阐明了垃圾收集过程:

                好了,栈和堆我就先介绍这么多了,画了半天的图,真心不好受啊~~~~~~

  • 相关阅读:
    安装与配置 Elasticsearch
    推荐几个 WebSocket 服务端实现
    GitLab 修改主机名,更换 IP 配置,配置 SMTP
    Choose GitLab for your next open source project
    大数据全栈式开发语言 – Python
    IPC's epoch 6 is less than the last promised epoch 7
    将/home空间从新挂载到/var/lib/docker
    Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to IP1:8020 Invalid volume failure config value: 1
    查看端口被那个进程占用
    查看java进程启动的详细参数和过程
  • 原文地址:https://www.cnblogs.com/fengyepiaoluo/p/4063995.html
Copyright © 2011-2022 走看看