java的引用类型所占用的内存空间

转:http://blog.sina.com.cn/s/blog_605f5b4f0100qt2t.html

Question:JAVA中的引用的内存分配大小是多少?

如,我声明了一个对象,它在栈中就先有了个空间,(用来放地址引用的),这个空间的大小是多少?


java规范中并没有强行定义虚拟机中任何一种类型在虚拟机中所占用内存的具体大小,但是规范规定了每种类型的取值范围。从这种角度上看,每种类型会有一个最小位宽,或者内存占用大小。


而且java虚拟机规定中,在方法区中所占用的内存大小与在栈帧所占用的内存大小不同,因为在方法区中占用内存以字节为最小单位,但是在战帧中以字为最小单位。byte类型在方法区中它占用8位,为一个字节,但是在栈帧中以一个字,即32位来处理,其实就是当作一个int类型来处理


楼主所说的引用类型,其位宽与int型一样,在方法区中它占用32位,4个字节,在栈帧中占用一个字。
但是虚拟机实现者可以扩大这种内存占用量,因为虚拟机规定只要满足取值范围即可,并没有规定非要32位一个字才行。


我觉得java的引用相当于c++的指针,C++的指针是占四个字节,java引用应该也是固定的大小。sunhotspot jvm和ibmjvm中都把引用实现为一个指针,因此在64位平台上,占8个字节,在32位平台上占4个字节。别的jvm不清楚。


1.引用本身的大小和操作系统的位数有关,正如15楼所言在64位平台上,占8个字节,在32位平台上占4个字节,这个应该是很自然的事情,因为32-bit的操作系统,在4G(2^32)的内存空间内找到某个地址,这个地址是用4bytes(32bits)来表示的。

2. 引用本身是保留在栈中的

3. 引用所指的对象,是存放在堆中的

 

整理自:http://topic.csdn.net/u/20090419/11/b90d9a7b-336e-40e1-afbe-0174ebf1144f.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值