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

前言

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

  • bit:位,是表示信息的最小单位,取值为0或1
  • byte:字节,一个byte等于8个bit
  • 64位机器:在计算机架构中,64位整数、内存地址或其他数据单元,是指它们最高达到64位(8字节)宽

基本类型

类型占用字节
boolean1
byte1
char2
int4
float4
long8
数组类型占用字节
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字节。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值