- 如果说时间复杂度是对算法运行次数的表征,那么空间复杂度则是算法运行时所占内存大小的度量
- java中常见内存占用
基本数据类型 | 内存占用字节数 |
---|---|
byte | 1 |
short | 2 |
char | 2 |
int | 4 |
long | 8 |
float | 4 |
double | 8 |
boolean | 1 |
-
计算机访问内存的方式都是一次一个字节,一个字节又是8位
-
一个引用需要8个字节表示,java中的引用就是变量,例如
Date a=new Date();
a这个变量就需要8个字节来表示 -
创建一个对象时,如new Date(),除了Date对象内部存储的数据占用对应的字节数外,该对象本身还占用内存开销,每个对象的自身开销为16个字节,用来保存对象的头信息——如int类型,地址等
-
一般内存的使用,如果不够8个字节,自动填充为8个,例如
public class A{
public int a=1;
}
通过new A()创建一个对象
这里的整型成员变量a占用4个字节,
而对象本身占用16个字节,但不是20个字节,因为会自动填充为8的倍数,因此一共占用24个字节, -
java中的数组被限定为对象,因为有一个属性length,所以需要额外的内存来记录长度,一个原始数据类型的数组对象需要24个字节的信息头(包括对象本身16个字节,加上4个字节保存长度,以及4个填充字节)加上保存值所需的内存
算法1:n,temp都是整型基本数据类型故占用4个字节——O(8)
算法2:n是整型基本数据类型(4),temp是整形数组(24+4n)——O(28+4n)
一个普通对象,占用8 bytes
数组,占用 12 bytes,包含普通对象的 8 bytes + 4 bytes(数组长度)