通过代码计算对象的大小

观察虚拟机配置

java -XX:+PrintCommandLineFlags -version

分析java对象的组成

普通对象

对象头:markword 8 (标识对象的状态,被回收了多少次)

ClassPointer指针:-XX:+UseCompressedClassPointers 为4字节(默认开启) 不开启为8字节(对象属于哪个Class)

实例数据 引用类型:-XX:+UseCompressedOops 为4字节(默认开启) 不开启为8字节 Oops Ordinary Object Pointers

Padding对齐,8的倍数 (64位的机器 按块来读,一下子读16个字节)

数组对象

对象头:markword 8

ClassPointer指针同上

数组长度:4字节

数组数据

对齐 8的倍数

用例测试

public classT03_SizeOfAnObject {public static voidmain(String[] args) {

System.out.println(ObjectSizeAgent.sizeOf(newObject()));

System.out.println(ObjectSizeAgent.sizeOf(new int[] {}));

System.out.println(ObjectSizeAgent.sizeOf(newP()));

}//一个Object占多少个字节//-XX:+UseCompressedClassPointers -XX:+UseCompressedOops//Oops = ordinary object pointers

private static classP {//8 _markword//4 _class pointer

int id; //4

String name; //4

int age; //4

byte b1; //1

byte b2; //1

Object o;//4

byte b3; //1

}

}

打印结果:

16 = 对象头8个 + ClassPointer指针 4个 +padding对齐 4个

16 = 对象头8个 + ClassPointer指针 4个 +数组长度 4个 +padding对齐0个

32 = 对象头8个 + ClassPointer指针 4个 + int id 4个 + name的引用四个 + int age 4个+1+1+4+1 + padding对齐

对象头具体包括什么

对象是怎么定位的

原文:https://www.cnblogs.com/ssskkk/p/12814931.html

java 对象字节数_JAVA一个对象占用多少字节相关推荐

  1. Java基本类型占用的字节数(char占用几个字节问题)

    Java基本类型占用的字节数: 1字节: byte , boolean 2字节: short , char 4字节: int , float 8字节: long , double 注:1字节(byte ...

  2. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个...

    2019独角兽企业重金招聘Python工程师标准>>> 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如"我ABC ...

  3. 编写一个截取字符串的函数,输入为一个字符串和字节数, 输出为按字节截取的字符串。 但是要保证汉字不被截半个。

    题目: 编写一个截取字符串的函数,输入为一个字符串和字节数, 输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4, 应该截为"我AB",输入 ...

  4. java字节数_Java各种类型占用的字节数

    数据类型 大小(二进制位数) 范围 默认值 byte(字节) 8 -128 - 127 0 shot(短整型) 16 -32768 - 32768 0 int(整型) 32 -2147483648-2 ...

  5. java中对象字节数_JAVA中求解对象所占字节大小

    该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口 接口1:计算对象在内存中所占字节数 接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象:返回一个新的对象, ...

  6. java 字符类型 字节数_JAVA基本数据类型所占字节数是多少?

    byte     1字节 short    2字节 int      4字节 long     8字节 char     2字节(C语言中是1字节)可以存储一个汉字 float    4字节 doub ...

  7. 查java使用的内存_Java内存占用排查的方法

    htop:查进程的内存占用 $ htop 相关名词: VIRT:virtual memory usage 虚拟内存 进程"需要的"虚拟内存大小,包括进程使用的库.代码.数据等 假如 ...

  8. java对象序列化作用_Java学习之——理解对象序列化

    Java的对象序列化就是把对象写入到输出流中,用来存储或传输:反序列化就是从输入流中读取对象.简单的来说是指将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列 ...

  9. java对象生命周期_Java对象生命周期和类生命周期

    原标题:Java对象生命周期和类生命周期 作者:彭空空 链接:https://www.jianshu.com/p/25ea857ba78b 导读 对象的生命周期 类的加载机制 类的生命周期 类加载器 ...

最新文章

  1. Linux那些事儿 之 戏说USB(19)设备的生命线(二)
  2. ROS-3 : Catkin工作空间和ROS功能包
  3. 统计机器学习第二章 感知机
  4. fdisk分区命令详解与fdisk非交互式分区
  5. 我来告诉你为什么中国民营企业管理失败的原因!
  6. ofdm原理_OFDM技术简介
  7. html内容点击按钮自动复制,HTML页面---复制按钮的使用(包含弹层)
  8. Sql UNION 合并多个结果集并排序
  9. 怎么理解汉罗塔问题_小白理解的汉诺塔中的递归问题
  10. anaconda的虚拟环境中查看已经安装好的包
  11. USB2.0 描述符
  12. 如何在Word中画横线?
  13. StudentManagerSystem(学生管理系统)(利用Result类,各种工具类)
  14. R语言将变量分组的三种方法(含cut函数介绍)
  15. 智能展示技术在淘宝封面图的应用
  16. 让你的手机随时成为空号
  17. android分析审计工具,Android审计平台
  18. ArcGIS Server中的各种服务
  19. 机试算法题-敲击计数器
  20. [someip专题]vsomeip使用以及代码解析1

热门文章

  1. watchOS app开发概论
  2. Nvidia-smi命令详解
  3. 南京计算机会计专业,理科全省位次5000名左右想学金融,师范,会计和计算机等专业应该怎么选?...
  4. 史上最全储能系统优缺点梳理
  5. python中的根号_python怎么表示根号运算
  6. 电销人怎么利用外呼系统避免封号?
  7. 2022年注册安全工程师安全生产专业实务(其他安全)考试模拟试题卷及答案
  8. (二)半导体二极管及其应用
  9. 程序员必备的1000个单词(分享软件开发常用词汇表)
  10. vim从入门到放弃-绝密版