硬件-内存

  • 内存(memory),又叫主存,是CPU与其他设备沟通的桥梁,主要用来临时存放数据,配合CPU工作,协调CPU的处理速度
    • 理解:
      • 硬盘数据、外设数据、网络传输要进入CPU以前,都要先进入内存
      • 临时存放,在断电后,内存内容就会消失
  • 内存的组成:内存地址、存储单元
    • 内存地址:一个编号,用于指示数据位置(绝对路径、相对路径))
    • 存储单元:实际存放数据的地方
      • 数据大小
        • 写过代码的应该都知道,定义一个数据,要先声明数据类型
          • 连续数据:数组(列表)......
            • 连续的存储单元 =====》内存块
            • 数据存储是不是可以更复杂
              • 所以就有了数据结构
  • 数据结构
    • 堆栈:不是一个,而是两种不同数据结构
    • 栈(stack):LIFO === Last In First Out 后进先出
      •  装入叫压入(push),q取出叫弹出(pop)
    • 队列(queue) ===FIFO 先进先出
      • FIFO === First In First out 先进先出
      • 顺序队列
      • 循环队列
    • 堆(heap):对象
  • 链表:
    • 列表:在内存中,会分配一个连续地址空间,存放数据  
      • 在列表中插入一个数据,插入索引位置之后的数据都要移动,所以导致这种输入,插入的数据并不快
    • 链表:链条
      • 链表中,存放数据时,地址空间+存储单元(自己的数据+下一个数据的地址空间)
        • 向链表中插入数据,地址空间+存储单元(自己的数据+前一个数据地址+后一个数据地址)
        • 当插入一个数据时,插入位置之后的数据不需要移动位置,这种方式,数据的更新速度非常快
        • 链表查找一个数据时,可能需要从头开始,读取数据,一个一个的比对,直到找到我们需要的数据才停止,这个过程有大量IO,所以读取数据的速度并不快
  • 树型结构
    • 二叉树
      • 建立在链表的基础上的一种数据结构
      • 二叉树的左边存储的是小于自身数据,右边是存储大于自身数据
      • 读取数据,因为数据已经做了二分,查找链路变短,io就减少了,读取速度也变快
      • 二叉树不足:随着存储的数据量增加,二叉树会越来越大,查找某个数据的io次数可能会非常多
      • 增、删和链表一样
  • B树:平衡二叉树,不是一个简单的平衡二叉树
    • B+s树 立体的平衡二叉树
  • 红黑树  
  • 内存使用  
    • 一个程序(服务)运行起来,需要分配一块内存空间,无异常时,就在分配的这块内存空间中弹性伸缩存储
      • 在这个内存空间,至少会包括一块栈区和一块堆区,还会包括其他
      • 栈区:存放程序中的变量
      • 堆区:存放程序中的对象
    • 典型案例:JVM(Java Virtual Machine  java虚拟机)
      • 程序计数器、java虚拟机栈、本地方法栈、方法区、堆内存
        • 程序技术器:记录持续执行字节码的行号指示器
        • java虚拟机栈:java方法执行时的内存模型
          • StackOverflowError:线程请求的栈深度大于虚拟机运行的最大深度
          • OutMemoryError:栈在动态扩展时,无法申请到足够的内存空间
            • 内存溢出:申请空间时,没有足够的空间可被申请
            • 内存泄露:程序运行时,申请内存空间,使用完了,不及时释放,导致可申请的内存空间越来越少。可以使用的内存空间就越来越少
            • OOM会导致整个内存条空间被使用吗
              • 不会,只会消耗该程序申请的空间,不会消耗内存条空间
        • 方法区
        • 堆内存
          • 划分为新生代、老年代、永久代(元空间)   
          • 新生代
          • 老年代
          • 永久代
posted @ 2021-07-24 10:03  sinder2018  阅读(92)  评论(0)    收藏  举报