java梳理-int类型在32位和64位有什么不同

本文属于java基础面试系列:
63 int类型在32位和64位有什么不同
我看了题目之后觉得不是很理解,应该是跟操作系统无关的,网上搜了下也是没有好文章专门说明,比较困惑,咨询下题主:是楚楚街面试问的,还是把自己理解思路试着写一下。
**************************************************
题主反馈“有些编译器编译成字节码时就是给这种类型分配的8个字节,对象头大小确实和位数有关,这个是对象的大小,和基本类型声明的引用无关”。既然跟编译器有关,就可 参照之前整理的笔记,
http://bohu83.blog.163.com/blog/static/35417565201623113356903/?newFollowBlog

写个demo验证下:
public static void main(String[] args) {
// TODO Auto-generated method stub
int a =1;
byte[] b = new byte[2];
char c ='a';
System.out.println("object:"+ SizeOfObject.sizeOf(new Object()));
System.out.println( "int"+SizeOfObject.sizeOf(a));
System.out.println( "byte[2]"+SizeOfObject.sizeOf(b));
System.out.println( "char"+SizeOfObject.sizeOf(c));
}
具体操作参照上篇笔记,主要是使用Instrumentation API,它有一个叫做getObjectSize()的方法
其中运行结果如下(我本机是jdk1.7 64:默认开启指针压缩):
java梳理-int类型在32位和64位有什么不同 - bohu83 - bohu83的博客
对象头: 32位系统上占用8bytes,64位系统上占用16bytes;
  下面未开启情况:  
new byte[2] 2*1+16+8=26+padding(8)=32, 
int 4+16+4 =24

针对开启情况: object header,未压缩前由一个native-sized mark word 8bytes加上一个class word 8bytes组成,共16bytes。采用压缩后,class word缩减为4bytes,现共占用12bytes;

2. reference类型,由8bytes缩减为4bytes;

3. 数组长度,由8bytes缩减为4bytes。
再算下压缩后情况:
new byte[2] 2*1+12+4=18+padding(6)=24
int 4+12=16
********************总结*************************
int与不同位数编译器有关,就上对象存储结构这块,与基本类型声明的引用无关,与操作系统无关。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值