算法分析(algs4)

时间:

算法增长数量级的分类

                           

典型的增长数量级函数

                                                           

内存:

变量的类型的内存

                                                                       

对象

一个对象使用的内存量=所有实例变量使用的内存+对象本身的开销(一般是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[n] :24(16+4+4)+4n(会被扩充为8的倍数);

double[n]:24+8n

                                                 

对象的数组

对象的数组就是对象的引用的数组。

对象数组的内存=对象所需的内存+引用所需的内存

例如

Date[n] :24(数组开销)+8n(引用)+32n(对象);

                                                            

数组的数组(二维数组)

例如

Double[m][n] : 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字节的内存。







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值