操作系统:
- 内存:
- 内存最小单位:1B ---> 8bit
- 16G 内存, 1G = 2 ^ 30B,16G = 2^32B,对应有 2 ^ 34个存储地址
- 内存地址下标从 1 开始
- 内存的纯空间不需要记录地址,当存入数据时需要记住地址
- 存储数据需要消耗额外的空间地址
- 内存每个数据的地址需要 34 bit
- 内存地址消耗空间:34bit * 2 ^ 34
- 当总容量不变,如果单元地址太小,存储地址消耗空间太大,不划算
- 当存储单元太大时(10M):
- 地址量会少很多,一个存储单元多个变量时只能访问第一个变量,其余空间被舍弃
- 数据地址:
- 在内存中:一个存储单元最多属于一个变量
- 在硬盘中:一个存储单元最多属于一个文件
- 操作系统优化内存:
- 重新规定存储单元
- 在内存中:一个存储单元 4KB(一页)
- 读取速度变快
- 在硬盘中:一个存储单元 4KB(扇区)
- 扇区:逻辑上存在,物理上不存在
- 读取速度快,当空间容易产生浪费
- 硬盘的扇区大小可调节,内存页的大小不可调节
- 操作系统向内存申请空间最少为 4KB
- 数组存储对内存消耗比较小,性能较好
- 高速缓存:
- 运行行:64B
- CPU多核心计算时,传输数据会占用总线,一个核心占用其它核心就不能工作
- 缓存就会从使用的数据从内存中拷贝一份,进行计算,此时就会释放总线
- 当高速缓存容量不够时会对数据进行回传
- 缺点:当多个核心计算一份数据时,回传结果的时候就会被覆盖
- 多级缓存:
- 缓存和内存之间传输距离长,传输数据很慢,但是在两个传输点之间建立多个高速缓存,每个缓存之间传输距离短传输速度变快,性能提升
- 离内存越近的缓存越大
- 缓存:
- 符合:比读取路径更短更快得地方,就叫做缓存
- 任何东西都可是缓存
- 总线:
- 如果缓冲区内的数据太多,想要读取到某个数据,就会出现等待的情况
- CPU 里六种变量中,布尔类型变量比重比较大,用 int 类型代表布尔类型,缓冲区中的数据就会变少,拥塞程度下降,读取时就会变得更快
- 计算机底层经常用空间换取时间
- 初始化:变量初次赋值
程序的执行流程
- 计算机三大件:
- CPU、内存、磁盘 \ 机械硬盘
- 磁盘:内部都是由文件的形式存储
- 内存:以运行状态存储文件
- JDK:对源文件的解释和帮助(任何操作系统都一样)
- JRE:屏蔽不同系统的底层差异
- 从 .java 文件通过 javac 命令编译成 .class 文件
- 把 .class 文件通过 java 命令读取到内存中开辟的 JVM 内存中的方法区
- main方法开始入栈,main 方法依次调用其它方法或变量入栈,执行完毕出栈
- 在内存中加载类中的元素
或与非运算
- &:遇 0 则 0,双 1 为 1
- | :遇 1 为 1
- ~:按位取反
- 负数是得到它的补码再按位取反
- ^:相同为 0 ,不同为 1(可以看成相加,不进位,取最后一位)
- << :bit 位向左移动,多余的舍弃,空余的补零
- M 进制左移 n 位,相当于 * M 的 n 次方(不超范围时成立)
- 位运算速度最快
- 任何两个数相乘都能拆成位运算
- 例:333 * 213 = 333 * (128 + 64 + 16 + 4 + 1) = 333 <<< 7 + 333 << 6 + 333 << 4 + 333 << 2 + 333
- 万亿级别数据相乘,最多四十次运算结束
- M 进制左移 n 位,相当于 * M 的 n 次方(不超范围时成立)
- >> :bit 位向右移动
- 多余的舍弃,空余补符号位(是 1 补 1,是 0 补 0)
- >>>:右移运算
- 左侧补零
- 此类运算是电压相互作用得出结果
- 结核性:
- 表示运算方向,从右向左运算或者从左向右运算
- CPU 内部都是许多异或非电路组成
- 主要由与或非电路,寄存器和多级缓存组成
- 寄存器组:判断下一步执行事件(相当于人类大脑,判断下一步的动作)
- 主要由与或非电路,寄存器和多级缓存组成
- 电路:
- 电路中有若干半导体,增加逻辑性
- 半导体:
- 在导体和绝缘体之间进行切换
- 电压被分解成若干个电压,作用于不同半导体,使得输出相应的结果