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