《算法》之内存介绍

Posted somewhereu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《算法》之内存介绍相关的知识,希望对你有一定的参考价值。

慢慢接触《算法第4版》这本书,很多内容看下来,如果不做个总结那么只有一个浅的印象,过一段时间就会逐渐遗忘,所以还是要记录下来加深印象并方便日后查阅。

计算机中,最常用的字节是表示八位的字节,包含八位的二进制数。
Java基本数据类型字节表示如下:

数据类型 字节
boolean 1
byte 1
char 2
int 4
float 4
double 8
long 8

如果某个计算机有1GB的内存(10亿字节),那么同一时间在内存中最多保存2.56亿万个int值。

对象的内存
一个对象占用的内存 = 该对象中所有属性占用内存 + 对象本身的开销(一般是16字节) + 填充字节(填充为8字节,64为计算机中的机器字) .
比如一个Integer对象 = 对象本身16字节 + 保存int值得4字节 + 4个填充字节 = 24字节:
技术图片

一个Date日期对象 = 对象本身16字节 + 3个int变量各需4字节(day,month,year, 共12字节) + 4个填充字节 = 32字节:
技术图片

链表节点内存
一个Node节点对象表示为:

// 一个节点
public class Node {
    public Item item;
    public Node next;
}

其中嵌套的Node节点需要额外的8字节(用于一个指向外部类的引用)。那么Node对象内存 = 对象本身16字节 + 指向Item和Node对象引用各需8字节 + 8个额外字节 = 40字节:
技术图片

数组的内存
数组视为对象,数组长度(length)记为N,那么结合以上内容,直接看下图应该不难理解:
技术图片

字符串对象内存
String对象的标准实现含有四个实例变量:一个指向字符数组的引用,一个int偏移量,一个int长度,一个int散列值。

public class String {
    public char[] value;
    public int offset;
    public int count;
    public int hash;
    ...
}

那么使用字节为 16+8+3*4+4 = 40字节。
由此可见,一个长度为N的String对象一般需要使用40字节+长度为N的字符数组(24+2N) ,总共64+2N字节。












以上是关于《算法》之内存介绍的主要内容,如果未能解决你的问题,请参考以下文章

玖游论坛VIP教程之游戏内存数据分析和基本算法

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

LightGBM的算法介绍

算法之常见的排序算法

编程思想与算法

常用编程思想与算法