内存管理
1 内存的作用
计算机的功能是实现计算和存储
使用计算机的目的是运行程序,而程序的运行主要需要计算资源和存储资源
- 计算资源即为处理器
- 存储资源即为内存
内存可以理解为能够进行数据存储和读取的空间
2 内存的结构
无论是最初的物理内存还是操作系统抽象出的逻辑内存,或是JVM为java抽象出的内存均具有相同的结构,即字节数组结构
2.1 物理内存
内存最初都是由计算机的硬件所提供的。
计算机组件中所有具有随机存储功能的存储设备共同构成了内存,如:
- 主存
- 显存
- BIOS
计算机硬件体系将这些零散的具有存储功能的组件抽象成了一个统一的存储空间
2.2 内存的抽象层次
直接使用计算机硬件接口运行的一组程序被称为操作系统。
其它所有的程序都是由操作系统运行的程序被称为应用程序。
应用程序运行时所使用的内存和处理器由操作系统抽象而成。
操作系统为每个程序抽象处理一套独立的计算存储资源。每个运行起来的应用程序拥有一套完全属于自己的CPU和内存
每个进程所拥有的那块完全属于进程自己的内存被称为逻辑内存。
2.3 Java程序内存
Java程序是由**Java虚拟机(JVM)**运行的,JVM是运行在操作系统之上的。
因此Java程序运行时所使用的内存是由JVM抽象而成的。
3 内存的结构
内存中存储数据的最小单位是bit(位),1bit只能存两种数据,1或者是0;因此内存中所有的数据都是以二进制形式无差别存储的。但是内存在存储数据时并非以bit为最基本的单元进行使用,而是以另一种被称为**byte(字节)**的单位进行存储的。
向内存中存储数据时,数据占用的存储空间永远是以字节为基本存储单元进行存储的。
为了能够正确描述出一个数据究竟存储到内存的哪几个字节,因此对于内存中的每一个字节均进行了编号。
内存每个字节的编号也被称为内存地址。
4 内存管理
会进入内存的数据包括:
- 程序代码
- 参与计算的数据
- 代码执行时的临时数据
- 程序计算的最终结果
对于一般的应用程序,其运行平台为操作系统
对于Java程序,其运行平台为Java虚拟机
4.1 JVM内存管理方式
-
当Java程序运行时,程序的代码和数据(静态数据、字符串常量等)会被放置在方法区中,且直至程序结束
-
当程序运行时的临时数据则存放在堆栈空间中
-
栈和堆采用不同的方式管理数据,所存储的数据也具有不同的特点:栈空间中存放局部变量,堆空间用于动态分配
-
栈空间中的局部变量会自动的释放,堆中的数据在满足释放的条件后需要等待垃圾收集器进行处理