Java 目标巨细的核算ITeye - AG环亚娱乐集团

Java 目标巨细的核算ITeye

2019年03月14日09时49分33秒 | 作者: 浩然 | 标签: 目标,巨细,字节 | 浏览: 825

  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


 
 


 
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐集团立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    Java 目标巨细的核算ITeye

    目标,巨细,字节
  • 2
  • 3
  • 4

    架构师之jdk8ITeye

    字符串,判别,如果
  • 5
  • 6

    Google Onsite 面经ITeye

    一个,空间,变量
  • 7

    《Windows中心编程》ITeye

    窗口,音讯,函数
  • 8
  • 9
  • 10