如何计算Java对象的大小

之前提到过java对象的内存布局,自然而然想到如何计算java对象的大小。下面结合自己看的一些文章,简单介绍下如何计算Java对象的大小。

1.对象布局和各类型长度

对象由对象头header、实例数据instance和对齐填充padding组成。
header:32位机器是8字节,64位级是16字节(开启指针压缩是12字节)。header包括markword和klass类型指针。markword在32位机器是32bit即4字节,在64位机器是64bit也就是8字节。klass指针在32位机器是4字节,在64位机器开启指针压缩是4字节不开启则是8字节。
instance:实例数据包括原始类型和引用类型。具体长度如下表
1476330-20190401212338406-1971474933.png
此外,HotSpot VM对字段有自己的分配策略,并不一定会安按照类定义字段的顺序分配内存,而是尽可能相同字宽的字段分配到一起。
对齐填充:HotSpot VM要求对象大小必须是8字节的整数倍。

2.计算对象大小

按照上面的规则可以计算简单对象大小,更复杂的也是综合上面规则来计算。
这里使用jol工具验证下,jol工具可以用来查看java对象内存布局和分布,项目地址是:http://openjdk.java.net/projects/code-tools/jol
下载jol-cli工具,地址是:http://central.maven.org/maven2/org/openjdk/jol/jol-cli/0.9/jol-cli-0.9-full.jar.
看下面实例:

public class SizeOfClass{
    private boolean bo;
    private byte by;
    private short st;
    private double d;
    private  int  i;
    private long l;
    private  Object obj;
    private char ch;
    private Object[] objAr;
}

这样一个对象长度是:12(header)+1(boolean)+1(byte)+2(short)+8(double)+4(int)+8(long)+2(char)+4*2(reference)+6(padding)=48。使用JOL下面验证下,我的是64位Windows,默认开启指针压缩。
1476330-20190401214413612-1092636087.bmp

转载于:https://www.cnblogs.com/Zafkiel/p/10639228.html

.NET MAUI 第13讲 深入探索 .NET MAUI Essentials:让应用感知设备与环境,打造智能体验 摘要:本文介绍了.NET MAUI Essentials库如何赋能移动应用感知设备环境的能力。文章详细讲解了设备信息获取(DeviceInfo)、网络状态监测(Connectivity)、地理位置服务(Geolocation)、地图集成(Map)以及传感器(Accelerometer等)等核心功能的使用方法,并提供了完整的代码示例。通过一个综合练习,展示了如何构建设备信息仪表板,实时显示设备参数和网络状态,并实现位置获取与地图导航功能。这些跨平台API能显著提升应用智能化和用户体验,同时保持代码简洁高效。 阅读详情

相关推荐

三维重建/SLAM笔记_最佳学习路线/攻略

本文目的 学习三维重建,需要不少知识,而知识之间又存在不同的依赖关系,为了后来人能少走弯路,也为了对自己的知识框架系统总结,特记录自己的学习路线。 学习心得 关于读书,了解基础知识是一方面,产生疑问也是一方面,为以后知道学习什么留下印象; 一回生,二回熟,看不懂时,大多是因为先验知识不够,没关系,多查多想,总会搞懂的。 学习路线 1.计算机图形学基础(OpenGL基础版)(徐文鹏 清...

惊鸿一博 3239

计算Java对象大小(附实际例子分析)

对象大小包括俩部分的内容,对象头和对象内容。(图片源于网络)。在一些情况下,我们需要计算Java对象大小,以合理分配内存。

li12412414的博客 4615

测量Java对象大小的demo

注入javaagent使用Instrumentation测量Java对象大小

Java中的对象内存布局以及如何计算对象大小

详细介绍了HotSpot虚拟机中的对象的内存布局、压缩指针、使用jol来查看和计算对象内存使用情况、对象的访问定位方式!

终生学习践行者 3766

计算 java_两种计算Java对象大小的方法objectFieldOffset

原文:http://blog.csdn.net/iter_zc/article/details/41822719 另一篇类似文章:http://www.cnblogs.com/magialmoon/p/3757767.html​ 这篇说说如何计算Java 对象大小的方法。之前在聊聊高并发(四)Java对象的表示模型和运行时内存表示这篇中已经说了Java对象的内存表示模型是Oop-Klass模型。 普通对象的结构如下,按64位机器的长度计算 1. 对象头(_mark), 8个字节 2. Oop指.

以爱护甲,爱满枫林。 4004

java对象的对齐规则

零、注记 本文是一次讨论的流水账,旨在讲明原理就行了,行文大家不要抱太大的希望。 另外,特别重要的是,本文是基于hotspot来讨论的,不同的java虚拟机是有不同的,这一点,一定要注意。 一、什么是对象的内存布局 简单一句话:对象实例在jvm堆内存中存放的结构。就是随便实例化一个对象new Object(),他在堆内存里面是怎么放置的。 看下面这个jol工具给出的java.mat...

厚积薄发者,轻舟万重山 5030

怎样计算一个 Java 对象大小?这儿有几种方法~

计算机发展的早期阶段,硬件的发展速度慢,容量小,所以软件开发人员写起代码里对 byte、bit 都是「斤斤计较」,这才使用写出来的应用能在我们今天看起来那么小的,配置那么低的硬件中运行...

Tomcat那些事儿 990

Java对象大小如何计算?

Java对象大小如何计算?

java1234的博客 876

java 计算大小_Java对象大小计算

这篇说说如何计算Java对象大小的方法。之前在聊聊高并发(四)Java对象的表示模型和运行时内存表示这篇中已经说了Java对象的内存表示模型是Oop-Klass模型。普通对象的结构如下,按64位机器的长度计算1. 对象头(_mark), 8个字节2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节3. 数据区4.Padding(内存对齐),按照8的倍数对齐数组对象结构是1. 对...

weixin_33664191的博客 1443

Java对象大小计算

理解Java对象大小的重要性、组成以及计算方法,以便更好地进行内存优化和性能调优,欢迎关注:鲁班曰。

基础决定高度 1816

[Java] 计算Java对象大小

序 在Java应用程序的性能优化场景中,时常需要考虑Java对象大小,以便评估后,进一步提出优化方案: 占用内存的大小。(比如 本地内存) 对象数据在网络传输中占用的网络带宽 对象数据在存储时占用的磁盘空间 ... 概述 对象大小如何计算 对象大小包括俩部分的内容,对象头和对象内容: 对象头 此处

fenfenfen520a的博客 211

java 计算对象大小

计算一个java对象大小,有助于了解一个程序在运行的时候,所需要的占用的内存的大小。那么如何才能知道一个java对象大小呢? **1.一个计算内存大小的工具** 下面首先了解一下,使用工具来计算java对象大小。这样可以直观的了解一个类所占内存空间的大小。 工具的名称是:RamUsageEstimator.在网上可以下载到。 public static void main(String[...

kkk0526的专栏 2462

java 对象长度_Java计算对象大小

一、计算对象大小的方法Java中如何计算对象大小呢,找到了4种方法:1.java.lang.instrument.Instrumentation的getObjectSize方法;2.BTraceUtils的sizeof方法;本质上java.lang.instrument.Instrumentation的使用是其他三种方法的基础,但是该类中的方法getObjectSize只是计算对象本身,JDK...

weixin_34206263的博客 1164

JVM —— Java 对象占用空间大小计算

为什么要知道 Java 对象占用空间大小Java 里面一切都是对象,每天都在使用的 Java 对象占据多少内存空间,原来竟是这样...

wenniuwuren 1万+

Java对象内存空间大小计算

内存对象大小计算,bitset 1亿key大小计算 bitmap一亿大小计算

u014618954的博客 5455

计算Java对象大小

计算Java对象内存大小

LookingNorth的博客 594

tw2868_tw2868driver_海思_linux_linux底层驱动_tw2868_

tw2868 linux 底层驱动程序,用于海思平台。

上一篇: JVM学习笔记3:GC日志和常用命令工具
Nier18988701708
博客等级 码龄11年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值