*注:援用类型(留意是援用类型变量

发布日期:2019-10-07       浏览人数:

  *注:援用类型(留意是援用类型变量,不是对象实例,素质上是指针,此中数组类型变量也属于援用类型变量)。

  JDK1.6当前才插手此项功能而且默认指针压缩。但计较公式不变,只是有些对象占用内存数值会变。大师自行计较压缩指针后或者32位JVM下的占用内存。

  对象占用内存 = 对象头开销 + 实例数据(若是是援用类型则包罗 变量 和 实例 两部门隔销) + 填凑数据。

  子类对象占用内存 = 子类对象头开销 + 子类实例数据 + (父类实例数据+填凑数据) + 填凑数据。

  由于现正在支流都是64位系统,下面测试类会按照64位计较内存。而且没有考虑指针压缩的环境。

  援用类型包含 变量 和 值 两部门占用空间大小(援用变量就相当于指针,用一个系统存储单位存储。值则是堆中实例的大小)。

  部门取计较空间无关的细节也不做申明,例如:对象头具体包含哪些消息、别离正在哪几位、什么是指针压缩等。

  本文各类结论全数参考过尺度文献,本人也进行过验证。验证过程本文不做申明。例如:当前支流虚拟机boolean类型运转时确实是1字节。

  jcmd //查看历程消息 (数字列显示的是PID,要法式正在运转过程中,想测试的话能够到公司办事器上查看)。

  64位JVM 对象头16字节(指针压缩后12字节),数组对象头24字节(指针压缩后16字节)。

  意义是一个Java对象利用的内存必然是8字节的整数倍,若是通过计较后发觉对象所需内存不是8字节的整数倍,则会将其填充为8字节的倍数。

  按照算法书上的定义,一个算法的空间复杂度包罗算法法式所占用的空间,输入初始数据所占用的空间以及算法施行过程中所需要的额外空间。