通常来说Hotspot jvm的对内存中的对象由以下几个部分组成

一个对象头,包含了一些整理工作所需信息

原始类型字段,不同类型大小各异(表1)

引用字段,占据4个字节(byte)

填充,在对象的末尾会有几个“浪费”了的字段,这样做是为了确保每个对象的开始地址都是字节的倍数。从而减少指向对象的指针的位数。

Java 类型

字节数

boolean

1

byte

char

2

short

int

4

float

long

8

double

boolean类型占一个字节而不是一位

整理工作所需信息

包括对象的类、id,还有一些标志位,比如是否有引用,是否被synchronized关键字锁定。

对象的粒度

在Hostspot中,所有的对象占据的字节数都是8的倍数,如果一个对象的头和字段占据的字节数加起来不是8的倍数,会向上取整(8进制的)

这是什么意思呢?举例来说:

一个Object对象占据8个字节

一个只有1boolean字段的实例占据16个字节:对象头8个字节,boolean字段1个字节,7个字节填充。

一个有8个boolean字段的实例占据16个字节:对象头8个字节,boolean字段8个字节,整好16个字节,不需要填充。

一个对象有2个long字段,3个int字段,一个boolean字段,会占据

对象头8个字节

long字段16个字节8*2

int字段12个字节3*4

boolean字段1个字节

再加上3个字节的padding,共计40个字节

java对象占多少内存的更多相关文章

  1. 获取JAVA对象占用的内存大小

    介绍两种获取JAVA对象内存大小的方法. 第一种:Instrumentation 简介: 使用java.lang.instrument 的Instrumentation来获取一个对象的内存大小.利用I ...

  2. 深入理解java虚拟机(二)HotSpot Java对象创建,内存布局以及访问方式

    内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的 ...

  3. HotSpot Java对象创建,内存布局以及访问方式

    内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的 ...

  4. 如何计算Java对象所占内存的大小

    [ 简单总结: 随便一个java项目,引入jar包: lucene-core-4.0.0.jar 如果是 maven项目,直接用如下依赖: <dependency> <groupId ...

  5. Java虚拟机创建对象的内存分配以及对象的内存布局

    本博文知识参考周志明<深入理解Java虚拟机> Java虚拟机在创建对象使如果进行内存分配: 1.指针碰撞 2.空闲列表 Java在多线程情况下创建对象的内存分配: Java完成对象内存分 ...

  6. java内存区域分析及java对象的创建

    java虚拟机在执行java程序的过程中会将它管理的内存区域加分为若干个的不同的数据区域. 主要包括以下几个运行时数据区域,这里就只介绍经常会用到的 1:java虚拟机栈:我们常说的堆栈,栈就是指的j ...

  7. Java内存管理及对Java对象管理

    Java内存管理及对Java对象管理 1Java内存管理 1.1Java中的堆和栈 通常来说,人们会将Java内存氛围栈内存(Stack)和堆内存(Heap). 栈内存用来保存基本类型的变量和对象的引 ...

  8. 计算Java对象内存大小

    摘要 本文以如何计算Java对象占用内存大小为切入点,在讨论计算Java对象占用堆内存大小的方法的基础上,详细讨论了Java对象头格式并结合JDK源码对对象头中的协议字段做了介绍,涉及内存模型.锁原理 ...

  9. 【Java】运行时Java对象在内存中是如何存储的?

    翻译自这一篇文章 我们知道函数在内存中实现为一个活动记录的栈.我们也知道Java方法在JVM栈区中实现为一个帧栈而Java对象是在堆区进行分配的. Java对象在堆内存中是怎样的呢?一旦对象保存在内存 ...

随机推荐

  1. python aes加解密

    python AES加密解密 python AES 双向对称加密解密 Python中进行Base64编码和解码 # encoding:utf-8 import base64 from Crypto.C ...

  2. [办公自动化]无法使用江南天安usbkey 无法使用视频网站

    同事打来电话说,无法使用江南天安开发的usbkey. 修复基本步骤记录如下: 1.卸载一切设备管理器中与之相关的驱动.拔出key. 2.重启计算机. 3.前往业务公开网站安装驱动. 4.插入key测试 ...

  3. PHP 错误与异常 笔记与总结(18 )页面重定向实现

    在发生错误时,将用户重定向到另一个页面. <?php header('content-type:text/html; charset=utf-8'); class ExceptionRedire ...

  4. PHP 错误与异常 笔记与总结(2)错误(Fatal)

    (接上) d.Fatal error 致命级别的错误 —— 程序终止执行 [例7]调用一个未定义的方法 <?php echo md6('dee'); echo 'continue'; 输出: ( ...

  5. ajax中文传送到模板显示为null

    问题: 名称空间声明语句必须是第一个语句中的脚本: Fatal error: Namespace declaration statement has to be the very first stat ...

  6. wordpress 自定义面板显示不了挂件区问题

    刚才在写一个wordpress主题,遇到一个问题.注册好的挂件区在控制面板(dashboard)上显示,在自定义面板上却不显示. 查询了下,发现几个老外朋友也遇到了这个问题: http://wordp ...

  7. img base64

    <?php header('Content-type:text/html;charset=utf-8'); //读取图片文件,转换成base64编码格式 $image_file = './429 ...

  8. CentOS + Nginx + PHP-FPM(FastCGI) 配置CodeIgniter

    nginx官方现在已经针对centos提供了repository,所以现在可以直接通过yum来安装啦,很方便. nginx官方安装教程:http://nginx.org/en/download.htm ...

  9. document.execCommand(”BackgroundImageCache”, false, true)

    很多时候我们要给一些按钮或是img设置背景,而为了达到数据与表现样式分离的效果,通常背景样式都是在CSS里设定的,但是这个行为在IE会有一 个Bug,那就是因为 IE默认情况下不缓存背景图片,所以当鼠 ...

  10. Bash 快捷键大全

    快捷键的一些说明: CTRL=C:这个键是指PC键盘上的Ctrl键 ALT=M:这个键是PC键盘上的ALT键,如果你键盘上没有这个键,可以尝试使用ESC键代替 SHIFT=S:此键是PC上的Shift ...