JAVA基础-内存

本文探讨了计算机位数与CPU处理能力的关系,详细解释了内存的物理特性和存取速度,以及内存如何通过叶块和磁盘扇区提高数据传输效率。还介绍了操作系统分扇区的目的,并讨论了在JAVA中,如何通过数组和缓冲区优化内存使用,减少内存浪费。
摘要由CSDN通过智能技术生成

1.计算机位数代表什么?

cpu一次处理数据的量代表操作系统的位数,32位系统,cpu一次只能计算32bit数据,总线一次只能传输32bit数据

当代cpu计算时间在0.2ns左右

 2.内存的物理特性

内存最小的存储单位类似与二极管,它能存储一个电状态,高或低,可表示1或0

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

内存的存取速度在20ns左右,由内存给cpu提供数据,cpu效率可达1%

3.内存叶块和磁盘扇区

原先由磁盘向cpu传输数据,每次只能给cpu传输64bit的数据,如果传输一个大的字符串(10000bit),就需要传输5000次。有了内存之后我们一个扇区(4kb)的数据传输到内存,大大减少磁盘的读取次数,提高效率

 内存的基本存储单元也是1字节或2字节(根据内存的不同而不同),但是操作系统为其划分了叶块,一个叶块是4kb,这样cpu发来一个地址信息,磁盘就立即将一整个叶块的数据发送到内存。这样读取大量数据会很快,但读取少量数据会造成浪费

4.操作系统分扇区的目的

更改默认的存储单元之后,存储单元就要用地址进行记录(每4kb记录一个地址),也就意味着,只要用了1kb,剩下的3kb就没办法用了,一个存储单元只能存储一份数据。

我们在定义int类型数据的时候,每个int类型数据都要占据4kb(一个叶块单元)。假如我们有10个int类型的数据,就要占用40kb的。内存的逻辑是多少个数据就占据多少个叶块单元,把这10个数据都封装到一个数组中,就变成了一个数据,大大减少内存消耗,这种逻辑叫buffer

例子:原来10个int类型数据要占据10个叶块

用一个数据去存储,它就会在一个叶块中,由于每个int类型数据都只会占据大小相同的内存空间,计算机就会计算出每个变量的开头地址,根据每个基本数据类型的大小进行计算,取出相应的bit数据。这就是为什么栈和队列全是数组类型的存储

?ps:这里有两个地址概念,一个是操作系统分配的内存地址,还有一个是自带的内存地址,输出的时候输出的操作系统分配到的地址

在内存充足的情况下,链表尽量分配连续的内存空间,而数组和链表不一样,数组是消耗连续的内存空间

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值