当前位置:首页 > 开发 > 编程语言 > Java > 正文

Java 对象大小的计算

发表于: 2015-07-19   作者:e200702084   来源:转载   浏览:
摘要:                           Java对象的大小 如何计算一个对象的大小呢?    
                          Java对象的大小

如何计算一个对象的大小呢?


    正常情况下,对象是分配在堆上。 然而,有些对象并不是分配在堆上。 如small thread-local 对象被分配在栈上或者寄存器中。 还有当前对象的状态也影响对象的大小。比如对象是否占用锁 或者 对象正在垃圾回收中。本章中讨论的是一般意义上的Java对象的大小。

1. 计算对象大小的规则
   1.1 在Hotspot中,对象主要包括三部分:

    对象头:

    基本类型 :
   
    对象引用类型 :占用四个字节
   
    padding : 浪费的空间  便于对象的分配

   1.2 基本类型的大小
      
       boolean 1字节
       byte    1字节

       char    2字节
       short   2字节
      
       int     4字节
       float   4字节

       long    8字节
       double  8字节

   1.3 对象头的大小
       记录一个对象的类 ID 和状态 (比如这个对象是否可达  锁状态) 。在Hopspot中, 正常的对象占头部需要占用8个字节。 数组占用12个字节(四个字节是数组的长度). 其它VM中都有相似的对象的头部。
  
   1.4 对象的大小
   Hotspot中,对象的大小必须是8的倍数。这意味着 :

   一个空对象占用8个字节
   一个仅有一个boolean值的对象 占用16个字节(8 + 1 + 7 )
   一个有8个boolean值的对象,也占用16个字节。(no padding)
  
   下一章介绍数组的大小。数组是是一种特殊的对象。在Java中,多维数组是数组的数组。例如二维数组,每一行都是独立的数组对象。
   
   boolean 数组需要每个元素都占用一个字节。尽管每一个字节都存储1Bit。 如果存储大量的位信息,可以使用BitSet。

在C语言中,二位数组是(或者任何多维数组)实际上一维数组。而在Java中,每个多维数组实际上一组内嵌数组。

考虑10*10的整型数组,out Array :12(头部) + 4 * 10 (指向10个一维数组的引用) + 4 (Padding ) = 56 个字节 

10个子数组 占用 (12 + 10 *4 + 4(Padding)) * 10 。 整个二维数组占用11 * 56 = 616个字节。 然而对于100个整型来说 ,只占用 4 * 10 * 10  = 400
  

   
      


   

Java 对象大小的计算

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1,类大小计算遵循结构体对齐原则 什么是内存对齐 编译器为每个“数据单元”按排在某个合适的位置上
这篇说说如何计算Java对象大小的方法。之前在聊聊高并发(四)Java对象的表示模型和运行时内存表示
在大规模Java 应用开发中,总会遇到内存泄漏的问题。通常的做法,通过 Profile 工具,分析 Java Hea
参考: http://langyu.iteye.com/blog/1167581 http://www.javamex.com/tutorials/memory/object_me
查看Mat文档时里面是这么描述Shallow Heap的:Shallowheap is the memory consumed by one object.
查看Mat文档时里面是这么描述Shallow Heap的:Shallow heap is the memory consumed by one object.
平时我们不会关心生成的对象到底在JVM中占据多少内存,当发生像OutOfMemory或JVM内存异常增加或减少
java计算对象占用内存大小 SizeOf Quickstart 1. include sizeOf.jar in the classpath of your app
java计算对象占用内存大小 SizeOf Quickstart 1. include sizeOf.jar in the classpath of your app
刚开始学习css的时候,对盒子大小的计算始终感觉有点儿乱,后来自己写了写demo,感觉好多了,跟我一
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号