栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java第三课---内存

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java第三课---内存

一、计算机的位数代表什么以及cpu的计算时间

cpu一次处理数据的量决定了我们操作系统的位数,我们的计算机当前有32位的和64位的,也就意味着我们cpu一次只能计算64bit的数据,那么也就意味着我们的总线一次只能传输64位的数据。

当代cpu的计算时间在0.2ns左右(虽然我一次才64bit,但我很快)

 

这是ms和ns的换算

二、内存和磁盘的速度分析

1.磁盘

我们在磁盘上找数据的时候,首先涉及到机械臂的移动,以及盘面的转动 共需要 5ms

上边我们看到cpu的的计算速度和每次只能计算的量,那么我们可以看到我们磁盘和cpu的速度差是25000000倍

那如何解决这个问题呢?------内存

所有的名词本身都不复杂,只是为了解释起来方便

计算机里面(内)有专门存储数据的东西(存)--内存

三、内存的物理特征

ram和rom

        ram--只读储存器

        rom--随机读取储存器

ram和rom都是存数据的,我们熟悉的cpu缓存,电脑和手机的内存就是ram

而固态硬盘,u盘,还有我们说的手机的32g    64g空间是rom。

ram和rom区别是,ram在断电后存储的数据就没了

因为ram通过电容存储的电荷,来保存我们的数据。电容像电池,充满电是1,没充电是0。要是没电了,电荷也没了,数据也就跟着没了。

内存最小单位就是这样一些类似于二极管这样的东西,它能存储一个电状态,高或低,可表示1或0。

且内存在断电之后数据就会消失原因就是因为我们的内存条用的是电容存储的电荷

内存的存取速度在20ns左右,如何由内存给我们的cpu提供数据,那么cpu的效率基本上能达到1%(比5ms块多了)。

四、内存的叶块和磁盘的扇区

有了内存以后:我们在以前没有内存的时候我们每次都只能给cpu传输64bit的数据。在我们编程当中每个数据类型都有基本单位,比如int类型的数据就是32bit,那么每次我们都只能传输两个int类型的数据。如果我们要传一个大的字符串1wbit的话需要传输5000次。有了内存以后我们一个扇区(4kb) 的数据传输到内存,大大减少磁盘的读取次数,提示效率。

内存的基本存储单元是也1字节或两字节(根据内存的不同而不同)。但是操作系统为其划分了叶块。一个叶块单元也是4Kb。这样当cpu发来一个地址信息,磁盘就马上将一整个叶块的数据全部发送到内存。这样做当读取大量数据的时候就会非常快,但是读取少量数据的时候就会造成浪费。所以我们才设计磁盘当中存储文件,在内存当中去存储变量

操作系统重现划分扇区的目的:

我们的磁盘只能提供磁道和基本的存储单元,扇区是操作系统默认划分的。在最开始的时候我们数据的读取类似于数据的当时一个数据单元代表一个数据,只需要做好分割就行。

当我们更改了默认的存储单元我们就要用地址进行记录。这就意味着我们每一个4kb的存储单元,只要用了1Kb,剩下的3Kb就不能存储数据了,一个存储单元只能存一份数据。这也就意味着我们的磁盘上只能存储文件,而无法存储其他类型的数据。

当我们在定义一个int类型的数据的时候,每个数据都会占据一个叶块单元。原因也是因为定位不到。那么假如我们现在有10个int类型的变量那就意味着需要占据10个4kb,也就是40kb,但是如果我们将一个int类型的数据,那么这些数据将全部放到一个叶块当中。内存的逻辑是有多少个数据就要分配多少叶块,假如我们将这些数据都封装到一个数组当中,那么就会大大减少我们的内存损耗,这种逻辑叫做--buffer

举例

假如我们现在有10个int类型的变量那就意味着需要占据10个叶块。

但是如果我们用一个数据去存储,他就会存储在一个叶块当中,由于每个int类型的数据都只会占据大小相同的内存空间,我们计算机只会记录每个变量的开头的地址,根据数组当中每个基本类型数据的大小进行计算,取出相应的bit数据。在这个地方我们可以看到数组类型的存储可以100%的打败链式存储。这也就是为什么操作系统的实现栈或队列全是数组类型的存储

这里边有两个地址的概念,一个是操作系统分配的内存地址还有一个是内存还以一个是自带的内存地址。所以我们在输出的时候输出的是操作系统分配到内存地址。

我们在学习链表的时候有的时候会发现:链表的内存空间是连续的,但是这里的空间连续指定是我们叶块的地址连续,这是因为我们的操作系统内存分配在内存空间足够的情况下回尽量分配连续的内存空间。所以在空间足够的情况下链表的空间也是连续的,但是链表和数组不一样,数组是消耗的连续的内存空间

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749887.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号