首先我们需要知道的是 Java 对象是包含三部分数据的:
1.对象头
2.实例数据
3.对齐填充(可能没有,因为 java 中规定对象的起始地址必须是 8 bytes 的正数倍)
对于普通对象而言,对象头中包括 mark word(8 bytes)、kclass(没有开启压缩的时候是 8 bytes,开启压缩了的话,就是 4 bytes),如果是数组类型的对象话,这里还有一个数组长度字段,4字节.
在 JDK6 64位 23 update+ 之后都默认开启了指针压缩功能.
现在验证 java 对象占几个字节.
public class Person {
int age;
}
我使用的是64位jdk1.8,按照理论分析,Person 对象应该占的字节数:
8(mark word) + 4(kclass) + 4(实例数据) + 0(不需要对齐填充) = 16B.
而通过 visualVM 工具查看的结果也是 16B.
现在来分析下数组的内存占用情况.
public class ObjectHeaderSizeTest {
public static void main(String[] args) {
Person[] person = new Person[4];
System.out.println(person);
Thread.currentThread().suspend();
}
}
首先我们知道 Person 对象占 16B,那么 person 占用的字节数为:
8 + 4 + 4 + 8 * 4 + 0 = 48B.
分享到:
相关推荐
NULL 博文链接:https://sdfx.iteye.com/blog/2201116
NULL 博文链接:https://312256159-qq-com.iteye.com/blog/1582196
JAVA对象所占内存大小计算例子,博文地址:http://blog.csdn.net/u012787710/article/details/53164226
主要介绍了计算一个Java对象占用字节数的方法,较为详细的分析了Java中各类对象所占用的字节数,需要的朋友可以参考下
注入javaagent使用Instrumentation测量Java对象的大小
NULL 博文链接:https://treemanfm.iteye.com/blog/2038954
有效测量出 java 对象 内存 大小 可供缓存等计算
统计缓存大小(查看java对象所占的内存大小).
命令行: java -XX:+PrintCommandLineFlags -version 查看jvm默认参数 分别是 -XX:+UseCompressedOops 和 -XX:+UseCompressedClassPointers 这2个参数都是默认开启(+代表开启,-代表关闭) UseCompressedOops:普通...
计算机后端-Java-Java核心基础-第15章 面向对象07 21. 接口练习:比较对象大小.avi
java获取list中两元素时间差
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
这一约束限制了程序的灵活性,所以虽然某些java数据存储于堆栈中——特别是对象引用,但是java对象并不存储其中。 3) 堆 一种通用的内存池(也位于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器...
面向对象计算始于这个基本概念,20. 即现实世界可以被描绘成一系列完全自治、封装的对象,21. 这些对象通过一个受保护的接口访问其他对象。 22. 多态性:多态性是指23. 允许不同24. 类的对象对同25. 一消息作出响应...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...