程序员必知的算法和数据结构:程序内存消耗的量化表示

内存消耗

除了需要考虑时间成本,我们也要注意内存消耗。内存消耗在Java程序中很好地被定义,但是java程序可以编译在各种不同配置环境的计算设备上,内存消耗因实现方式不同而不同,在这里讨论java中三种类型的内存消耗。原生类型(Primitive types)

例如,因为java int数据类型是整数值的集合,取值范围位于:−2,147,483,648 ~ 2,147,483,647,所占的字节数为4个。如下图所示为主要原生类型所占的内存字节数:

对象(objects)

为了确定一个对象的内存消耗,我们需要求以下两者的和:

每一个实例的内存消耗

每一个对象关联的头部消耗,典型的是8个字节

例如,一个复数对象消耗内存为32个字节,其中16个字节被头部所占,另外,每个double变量各占8个字节。

对一个对象的引用通常消耗8个字节的内存。当一个数据类型包含一个对象的引用时,我们必须单独分配8个字节用于存储引用关系,每个对象的头部消耗16个字节,还包括此对象的实例变量所耗内存。数组和字符串(Arraysand strings)

在java中,数组是通过objects被实现的,典型的实现方法:带有2个实例变量,一个指针指向第一个元素的首地址,另一个指向元素长度。对于原生类型,含有 n个元素的数组用24字节的头部信息,另外包括存储一个元素需要的字节数乘以元素个数。典型的例子如下:

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();