java基本数据类型,及JVM内存对齐

JVM在创建对象的时候,会有一个内存对齐的概念;如

1、 一个空对象占用8字节( 空对象:占8字节 64位bit )
2、 只有一个 boolean 字段的类实例占 16 字节:头信息占 8 字节,boolean 占 1 字节,为了对齐达到 8 的倍数会额外占用 7 个字节
3、 包含 8 个 boolean 字段的实例也会占用 16 字节:头信息占用 8 字节,boolean 占用 8 字节;因为已经是 8 的倍数,不需要补充额外的数据来对齐
4、 一个包 2个 long 字段、3个 int字段、1 个 boolean 字段的对象将占用:
头信息占 8 字节;
2 个 long 字段占 16 字节(每个 long 字段占用 8 字节);
3 个 int 字段占 12 字节(每个 int 字段占用 4 字节);
1 个 boolean 字段占 1 个字节;
上面加起来是 37 字节,
为了对齐额外多的 3 个字节,需求对齐 ,为8 的倍数 40

 

java中8种基本数据类型为例

1.java中8种基本数据类型有哪些: 

布尔 boolean ,

整型 byte , char , short ,int, long,  

浮点类型float , double

----------------------------------------------------------------------------------------------------------------

2.占位是多少呢

【int】

int    4字节byte 32 bit  

int  默认值为0

Integer 默认null  

Integer.MAX_VALUE;  //2的31次方-1

Integer.MIN_VALUE;  //负的2的31次方

【boolean】
 

boolean 默认false

boolean 占8分之1字节 1位bit

【char 】

char 1个字节 8 bit

【short】

short 2字节  16 bit 

【float 】

float  4字节byte  32位bit;
 

float  默认0f

Float.MAX_VALUE;   //2的128次方-1

Float.MIN_VALUE;   //2的-149次方

【long】

long  8字节byte  64位bit;

long  默认0l(L小写)

Long.MAX_VALUE;   //2的64次方-1

Long.MIN_VALUE;   //负的2的64次方

【double 】

double  占8字节byte  64位bit;

Double.MAX_VALUE;   //2的1024次方-1

Double.MIN_VALUE;    //2的-1074次方

JVM内存对齐:

比如 :boolean会占用一比特或者占用一个字节的第八位,但是HotSpot虚拟机会为每个Boolean字段分配一个字节的空间

 

 

注意:

32位64位操作系统基本数据类型字节大小,只要注意long:

32位: long: 4个字节 

64位: long: 8个字节

 

关于二维数组占用字节数计算:注意数组有一个不同的地方在于,它本身会有一个记录数组长度的int类型,占用4字节,本身又是一个对象,会占用8字节

----------------------------------------------------------------------------------------------------------------

3.  那64位和32位操作系统在读取上有什么区别呢:

首先  64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存

其次 64位 CPU一次可提取64位数据,32位的CPU一次只能提取32位数据, 所以64位比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统,64bit软件的基础上的

----------------------------------------------------------------------------------------------------------------

4.需要注意些什么

在 Java 虚拟机中没有任何供 boolean 值专用的字节码指令,在 Java 语言之中涉及到 boolean 类型值的运算,

在编译之后都使用 Java 虚拟机中的 int 数据类型来代替。 

Java 虚拟机直接支持 boolean 类型的数组,虚拟机的 newarray 指令可以创建这种数组。

boolean 的数组类型的访问与修改共用 byte 类型数组的 baload 和 bastore 指令。

综上所述, 单个boolean型是占4字节(因为变异后会用int来代替), 而boolean数组中的则占1字节(因为用byte来代替的)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值