[普林斯顿大学教程]只需十分钟教你如何分析储存空间占用大小——int、double、char占多少字节?如何分析一个类class占用的储存空间?

Shams ·
更新时间:2024-11-13
· 562 次阅读

前言

本文中的储存分析以64位机器上的java为标准,其他主流语言也基本相通。
在分析储存空间大小前我们需要掌握基本知识:

bit:位,是表示信息的最小单位,取值为0或1 byte:字节,一个byte等于8个bit 64位机器:在计算机架构中,64位整数、内存地址或其他数据单元,是指它们最高达到64位(8字节)宽 基本类型
类型 占用字节
boolean 1
byte 1
char 2
int 4
float 4
long 8
数组类型 占用字节
char[] 2N+24
int[] 4N+24
double[] 8N+24
类(class)的内存占用分析 对象头Object overhead:占用16个字节 引用Reference :占用8个字节 填充部分Padding :每个类的其他组成部分要占用8个字节
Padding可能不太好理解,我们以下面这个Date类为例进行分析讲解:
在这里插入图片描述
我们看到对象头占用了16个字节,day、month、year各自占用了4个字节,但是问题来了,我只能8个字节8个字节的占用,day和month可以正好占用8个字节,year就需要和padding填充块共同占用8个字节。因此,总的空间占用位32个字节。

我们再来看看第二个例子:
对于一个String类,需要有一个char类型的数组储存值,占用2N+24个字节(参照上面的数组占用)
同时因为引用到了数组,需要加上8字节的空间。
offset、count、hash三个int类型的参数再加上为了凑到8字节的整数倍而加上的4字节的padding填充部分,一共16字节
因此总共的空间占用位2N+64字节。
在这里插入图片描述


作者:神圣大黄瓜



DOUBLE int 大学 class char 教程

需要 登录 后方可回复, 如果你还没有账号请 注册新账号