1、计算机存储单位
从小到大以此为位bit、字节byte,千字节,兆,千兆,TB。相邻单位之间都是1024倍。
8bit=1byte
1024byte=1k
等等。
2、计算机存储元件
1、寄存器:中央处理器CPU的一部门,是计算机读写速度最快的存储元件,但是容量很少。
2、内存。
独立的计算机部分,是和CPU沟通的桥梁,用于存放CPU中运算数据以及外部存储交换的数据。尽管今天,对内存的读写速度已经很快的,但是由于寄存器是CPU的,所以对于内存的读写速度和对于寄存器的读写速度上还是有几个数量级的差距。但是没办法,对于内存的读写I/0操作是很难消除的,寄存器数量有限,不可能通过寄存器来完成所有的运算任务。
3、内核空间和用户空间。
连接寄存器和内存的地址总线,地址总线的宽度影响了物理地址的索引范围,因为总线宽度决定了处理器一次可以从寄存器或者内存中获取多少个BIT,同时也决定了处理器最大的寻址地址空间,比如32位CPU的系统,可以有4GB的内存空间。
4、字长
CPU的主要技术指标之一,指的是CPU一次能并行处理二进制的位数(Bit)。通常称处理字长为8位数据的CPU为8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。不过目前虽然CPU大多是64位的,但还是以32位字长运行。
jvm前言
说到内存区域,可能很多人第一反应就是堆栈,切记堆栈是两个概念。堆和栈是两个不同的概念,简单理解的话堆是用来存放对象而栈是用来执行程序的。其次堆内存和栈内存这种划分方式是很粗糙的,这种划分方式只能说明我们大多数程序员比较关注的是这两块。
java内存区域划分实际上远比这个复杂的多,对于我们java程序员,我们不需要给对象delete、free代码,不容易出现内存泄漏和内存溢出的问题。但是,也正是因为java把这个控制权交给jvm,一旦出现内存泄漏,查找问题就会比较困难。
jvm内存分配:
1、线程独有的内存区域
1.1、这块内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码通过改变这个计数器的值来选取吓一跳需要执行的字节码指令。
1.2、虚拟机栈
生命周期和线程相同,每个方法执行的同时都会创建一个栈帧,用于存储局部变量,操作数,方法出口,动态链接等信息。每个方法从调用开始到借宿的过程,就对应虚拟机栈中入栈到出栈的过程。
1.3、方法栈
可以和虚拟机栈统一
2、线程共享区域
2.1、堆
大多数应用中,堆是java虚拟机所管理的内存中最大一块,它在虚拟机启动时创建,次内存唯一的目的就是存放对象实例。
2.2、方法区
这些区域存储虚拟机栈加载类的信息,常量,今天变量,即时编译器编译后的代码等数据。
2.3、运行时常量池