JVM概念之Java对象的大小与引用类型.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JVM 概念之 Java 对象的大小与引用类型 参考文献 1.JVM 调优总结(二) - 一些概念 2.Java 深度历险(四)—— Java 垃圾回收机制与引用类型 正文 在参考文献 1 中,总结了 JVM 概念中的 Java 对象的大小, 以及三种引用类型的定义与区分。 Java 对象的大小 基本数据的类型的大小是固定的,这里就不多说了。对 于非基本类型的 Java 对象,其大小就值得商榷。 在 Java 中,一个空 Object 对象的大小是 8byte ,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句: Object ob = new Object(); 这样在程序中完成了一个 Java 对象的生命,但是它所 占的空间为:  4byte+8byte  。 4byte  是上面部分所说的  Java 栈中保存引用的所需要的空间。而那  8byte  则是  Java  堆中 对象的信息。因为所有的 Java 非基本类型的对象都需要默 认继承 Object 对象,因此不论什么样的 Java 对象,其大小 都必须是大于 8byte 。 有了 Object 对象的大小,我们就可以计算其他对象的大 小了。 Class NewObject { int count; boolean flag; Object ob; } 其大小为:空对象大小 (8byte)+int 大小 (4byte)+Boolean 大小 (1byte)+ 空 Object 引用的大小 (4byte)=17byte 。但是因 为 Java 在对对象内存分配时都是以 8 的整数倍来分,因此 大于 17byte 的最接近 8 的整数倍的是 24 ,因此此对象的大 小为 24byte 。 这里需要注意一下基本类型的包装类型的大小。因为这 种包装类型已经成为对象了,因此需要把他们作为对象来看 待。包装类型的大小至少是 12byte( 声明一个空 Object 至少 需要的空间 ),而且 12byte 没有包含任何有效信息,同时, 因为  Java  对象大小是  8 的整数倍,因此一个基本类型包装 类的大小至少是  16byte  。这个内存占用是很恐怖的,  它是使 用基本类型的  N 倍 (N2)  ,有些类型的内存占用更是夸张  ( 随 便想下就知道了  )。因此, 可能的话应尽量少使用包装类。  在 JDK5.0 以后,因为加入了自动类型装换,因此, Java 虚拟 机会在存储方面进行相应的优化。 引用类型 对象引用类型分为强引用、软引用、弱引用和虚引用。强引用 :就是我们一般声明对象是时虚拟机生成的引用, 强引用环境下,垃圾回收时需要严格判断当前对象是否被强引用,如果被强引用,则不会被垃圾回收。 软引用 :软引用一般被做为缓存来使用。 与强引用的区别是,软引用在垃圾回收时,虚拟机会根据当前系统的剩余内 存来决定是否对软引用进行回收。如果剩余内存比较紧张,则虚拟机会回收软引用所引用的空间 ;如果剩余内存相对富裕,则不会进行回收。 换句话说,虚拟机在发生 OutOfMemory 时,肯定是没有软引用存在的。 弱引用 :弱引用与软引用类似, 都是作为缓存来使用。 但与软引用不同,弱引用在进行垃圾回收时,是一定会被回收掉的,因此其生命周期只存在于一个垃圾回收周期内。 强引用不用说,我们系统一般在使用时都是用的强引用。 而“软引用”和“弱引用”比较少见。他们一般被作为缓存使用,而且一般是在内存大小比较受限的情况下做为缓存。因为如 果内存足够大的话,可以直接使用强引用作为缓存即可,同时可控性更高。因而,他们常见的是被使用在桌面应用系统的缓存。

文档评论(0)

187****5086 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档