算法分析(algs4)
2017-08-18 10:38
295 查看
时间:
算法增长数量级的分类
典型的增长数量级函数
内存:
变量的类型的内存
对象
一个对象使用的内存量=所有实例变量使用的内存+对象本身的开销(一般是16字节,包括一个指向对象的类的引用、垃圾收集信息以及同步信息)假设表示机器地址需要8字节,这是现在广泛使用的64位架构中的典型表示方式。对象的引用一般都是一个内存地址,因此会使用8字节。
一般内存的使用都会被填充为8字节(64位计算机中的机器字)的倍数。
例如
Integer: 24=16+4+4;
Date: 32=16+4+4+4+4;
Counter: 32=16+8+4+4;
链表
嵌套的非静态(内部)类需要额外的8字节(用于一个指向外部类的引用)。
例如
Node: 40=16+8+8+8
数组
原始数据类型数组Java中数组被实现为对象,它们一般都会因为记录长度而需要额外的内存。
原始数据类型数组=24字节头信息(16字节的对象开销+4字节保存长度+4填充字节)+保存值所需要的内存。
例如
int
:24(16+4+4)+4n(会被扩充为8的倍数);
double
:24+8n
对象的数组
对象的数组就是对象的引用的数组。
对象数组的内存=对象所需的内存+引用所需的内存
例如
Date
:24(数组开销)+8n(引用)+32n(对象);
数组的数组(二维数组)
例如
Double[m]
: 24(数组的数组的开销)+8m(所有元素数组的引用)+24m(所有元素数组的开销)+8mn(m个长度为n的double类型的数组)
字符串对象
String对象String类型对象的标准实现含有4个实例变量:一个指向字符串数组的引用(8字节)和3个int值(各4字节)。
第一个int值描述的是字符数组中的偏移量,第二个int值描述的是一个计数器(字符串的长度),第三个int值是一个散列值。
因此,每个String对象总共使用40字节(=16字节表示对象+三个int实例变量各需4字节+数组引用的8字节+4个填充字节)
字符数组所需的内存需要另记。String的char数组常常是在多个字符串之间共享的,这样可以节省内存。
子字符串
一个长度为n的String对象一般需要40字节(String对象本身)+(24+2n)字节(字符数组),总共(64+2n)字节。
调用substring()方法时,就创建了一个新的String对象(40字节),但他仍然重用了相同的value[]数组。因此该字符串的子字符串只会使用40字节的内存。
相关文章推荐
- 算法1.2下压堆栈(链表表示)(algs4)
- 算法1.3 先进先出队列(algs4)
- Algs4-2.2.2 归并算法为EASYQUESTION排序的轨迹
- 算法1.4背包(algs4)
- algs4-SocialNetworkConnUF
- 算法(第4版)java环境配置教程—algs4
- 算法第四版 在Eclipse中调用Algs4库
- 打印N的二进制表示(algs4)
- algs4 union-find算法的实现
- Algs4-2.2.11 改进的Merge排序
- 在Eclipse中调用Algs4库
- 典型的数组处理代码(algs4)
- 算术表达式补全右括号(algs4)
- 关于Algs4书中导入Stdlib.jar 和 algs4.jar包的问题
- Algs4-2.2.17链表归并排序
- 算法第四版 在Linux 中调用Algs4库
- 典型静态方法的实现(algs4)
- 1.3.10将算术表达式由中序表达式转为后序表达式(algs4)
- 在Eclipse中调用Algs4库
- 3-sum问题平方对数级别解法(algs4)