java 对象字节数_JAVA一个对象占用多少字节
通过代码计算对象的大小
观察虚拟机配置
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一个对象占用多少字节相关推荐
- Java基本类型占用的字节数(char占用几个字节问题)
Java基本类型占用的字节数: 1字节: byte , boolean 2字节: short , char 4字节: int , float 8字节: long , double 注:1字节(byte ...
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个...
2019独角兽企业重金招聘Python工程师标准>>> 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如"我ABC ...
- 编写一个截取字符串的函数,输入为一个字符串和字节数, 输出为按字节截取的字符串。 但是要保证汉字不被截半个。
题目: 编写一个截取字符串的函数,输入为一个字符串和字节数, 输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4, 应该截为"我AB",输入 ...
- java字节数_Java各种类型占用的字节数
数据类型 大小(二进制位数) 范围 默认值 byte(字节) 8 -128 - 127 0 shot(短整型) 16 -32768 - 32768 0 int(整型) 32 -2147483648-2 ...
- java中对象字节数_JAVA中求解对象所占字节大小
该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口 接口1:计算对象在内存中所占字节数 接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象:返回一个新的对象, ...
- java 字符类型 字节数_JAVA基本数据类型所占字节数是多少?
byte 1字节 short 2字节 int 4字节 long 8字节 char 2字节(C语言中是1字节)可以存储一个汉字 float 4字节 doub ...
- 查java使用的内存_Java内存占用排查的方法
htop:查进程的内存占用 $ htop 相关名词: VIRT:virtual memory usage 虚拟内存 进程"需要的"虚拟内存大小,包括进程使用的库.代码.数据等 假如 ...
- java对象序列化作用_Java学习之——理解对象序列化
Java的对象序列化就是把对象写入到输出流中,用来存储或传输:反序列化就是从输入流中读取对象.简单的来说是指将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列 ...
- java对象生命周期_Java对象生命周期和类生命周期
原标题:Java对象生命周期和类生命周期 作者:彭空空 链接:https://www.jianshu.com/p/25ea857ba78b 导读 对象的生命周期 类的加载机制 类的生命周期 类加载器 ...
最新文章
- Linux那些事儿 之 戏说USB(19)设备的生命线(二)
- ROS-3 : Catkin工作空间和ROS功能包
- 统计机器学习第二章 感知机
- fdisk分区命令详解与fdisk非交互式分区
- 我来告诉你为什么中国民营企业管理失败的原因!
- ofdm原理_OFDM技术简介
- html内容点击按钮自动复制,HTML页面---复制按钮的使用(包含弹层)
- Sql UNION 合并多个结果集并排序
- 怎么理解汉罗塔问题_小白理解的汉诺塔中的递归问题
- anaconda的虚拟环境中查看已经安装好的包
- USB2.0 描述符
- 如何在Word中画横线?
- StudentManagerSystem(学生管理系统)(利用Result类,各种工具类)
- R语言将变量分组的三种方法(含cut函数介绍)
- 智能展示技术在淘宝封面图的应用
- 让你的手机随时成为空号
- android分析审计工具,Android审计平台
- ArcGIS Server中的各种服务
- 机试算法题-敲击计数器
- [someip专题]vsomeip使用以及代码解析1