openjdk jol 工具打印 Java 对象内存布局
1、maven 依赖
<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.10</version>
</dependency>
2、测试类
package constxiong;import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.info.GraphLayout;/*** 测试对象占用的内存信息*/
public class TestObjectSize {public static void main(String[] args) {System.out.println("对象内部信息");System.out.println(ClassLayout.parseInstance(new String("ConstXiong")).toPrintable());System.out.println(ClassLayout.parseInstance(new char[]{'C', 'o', 'n', 's', 't', 'X', 'i', 'o', 'n', 'g'}).toPrintable());System.out.println("对象整体信息");System.out.println(GraphLayout.parseInstance(new String("ConstXiong")).toPrintable());System.out.println(GraphLayout.parseInstance(new char[]{'C', 'o', 'n', 's', 't', 'X', 'i', 'o', 'n', 'g'}).toPrintable());System.out.println("对象占用总空间");System.out.println(GraphLayout.parseInstance(new String("ConstXiong")).totalSize());System.out.println(GraphLayout.parseInstance(new char[]{'C', 'o', 'n', 's', 't', 'X', 'i', 'o', 'n', 'g'}).totalSize());}
}
3、打印结果
对象内部信息
java.lang.String object internals:OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)8 4 (object header) d0 16 3e 17 (11010000 00010110 00111110 00010111) (389945040)12 4 char[] String.value [C, o, n, s, t, X, i, o, n, g]16 4 int String.hash 020 4 (loss due to the next object alignment)
Instance size: 24 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total[C object internals:OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)8 4 (object header) 08 02 3e 17 (00001000 00000010 00111110 00010111) (389939720)12 4 (object header) 0a 00 00 00 (00001010 00000000 00000000 00000000) (10)16 20 char [C.<elements> N/A36 4 (loss due to the next object alignment)
Instance size: 40 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total对象整体信息
java.lang.String@1a93a7cad object externals:ADDRESS SIZE TYPE PATH VALUEd6284f40 40 [C .value [C, o, n, s, t, X, i, o, n, g]d6284f68 11751072 (something else) (somewhere else) (something else)d6db9e08 24 java.lang.String (object)[C@3b764bced object externals:ADDRESS SIZE TYPE PATH VALUEd6df9610 40 [C [C, o, n, s, t, X, i, o, n, g]对象占用总空间
64
40
内存分析:
https://www.javanav.com/val/49e9ce5857744a39a88b1977d84086c7.html
【Java学习资源】整理推荐
- Java 8 Stream API Demo
- Druid 使用
- 借助 libreoffice,word 转 pdf 体验
- Java 动态代理
- openjdk jol 工具打印 Java 对象内存布局
- Spring整合MyBatis
- MyBatis 自定义插件
- MyBatis 延迟加载
- MyBatis 1对1 1对多 关联查询
- MyBatis insert 获取自增主键
- MyBatis 批量插入
- 分页插件 Mybatis-PageHelper
- MyBatis 原生使用
- Sharding-JDBC 实现分库分表
- JDK1.8 中的日期与时间 API
- Sharding-JDBC 实现读写分离
【Java面试题与答案】整理推荐
- 基础与语法
- 集合
- 网络编程
- 并发编程
- Web
- 安全
- 设计模式
- 框架
- 算法与数据结构
- 异常
- 文件解析与生成
- Linux
- MySQL
- Oracle
- Redis
- Dubbo
openjdk jol 工具打印 Java 对象内存布局相关推荐
- JOL(java object layout): java 对象内存布局
我们天天都在使用java来new对象,但估计很少有人知道new出来的对象到底长的什么样子?对于普通的java程序员来说,可能从来没有考虑过java中对象的问题,不懂这些也可以写好代码.今天,给大家介绍 ...
- JOL(java object layout --java 对象内存布局)
JOL(java object layout --java 对象内存布局) ⚠⚠⚠本文以java普通对象为切入点,分析java的对象内存布局,数组见文末 maven地址
- java对象内存布局中的基本类型字段排列顺序
java对象内存布局: mark word(记录hashCode值和锁的标识等等) class对象指针 类字段 补齐位 如果是数组对象,2.3之间应该加上 数组长度 布局排列表: 32位jdk 普通 ...
- Java对象内存布局(JOL)
前言 Java对象的内存布局主要由对象头(Object Header).实例数据(instance data).对齐填充(padding)三部分组成. 对象头:存储对象的基础信息(如锁状态.GC状态. ...
- 使用JOL工具计算Java对象的大小
注意:本文默认环境为 64 位操作系统,JDK 为 1.8,JVM 为 HotSpot. 工具 JOL全称为Java Object Layout,是用来分析JVM中对象布局的工具,可以在运行时计算某个 ...
- Java对象内存布局和对象头
Object obj = new Object(); //new 一个对象,占内存多少? 没有实例数据的话,就是16个字节 1.对象的内存布局 在HotSpot虚拟机里,对象在堆内存中的存储布局可以划 ...
- java对象内存布局及大小
查看虚拟机配置(以hotspot 64bit 虚拟机为例) java -XX:+PrintCommandLineFlags -version 输出结果如下图,表示当前虚拟机的配置信息.每个人的机器可能 ...
- Java对象内存布局
文章目录 1 场景 2 内存布局图 3 代码验证 3.1 maven依赖 3.2 代码示例 3.3 输出内容 3.4 分析 3.5 补充 4 问题解答 4.1 new空对象占用多少字节 4.2 Jav ...
- java 对象内存布局_Java--对象内存布局
在HotSpot虚拟机中,对象在内存中的存储布局可以分为3块区域:对象头部.实例数据.对齐填充. 一.对象头部Header的布局 Mark Word Class 指针 在32位系统下,上面两部分各占4 ...
最新文章
- 文本分类step by step(二)
- UI中的响应时间:3个重要的界限
- 数据预处理-异常值识别
- Qt中的自定义模型类
- android 用dx.bat 转换class 为dex
- 多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)
- 连载四:PyCon2018|恶意域名检测实例(附源码)
- Linux下mysql主从同步备份master-slave详细配置
- Yarn 和 NPM 国内快速镜像(淘宝镜像)
- URLEncoder URLDecoder
- dp算法求解矩阵连乘的问题
- 计算机键盘fn,笔记本键盘fn键有什么用 笔记本键盘fn键使用说明大全
- 迭代期望和方差(iterated expectation,variance)
- java.io的缓冲流、转换流、序列化流
- WARNING: Waited 15 secs for write IO to PST disk 4 in group 3 in alert_asm.log
- Nolan最新版本2.4 Windows和docker安装升级教程, 登陆修复.排除个别需要实名的账号,nvjdc对接青龙面板教程
- 飞书:远程办公更轻松
- 让你自己制作的木马和病毒用360安全卫士杀不出。加壳,免杀,加花,捆绑,压缩。
- 分享一款快速、免费抠图工具——凡科快图
- 9个最佳新闻聚合器网站(+如何构建自己的网站)
热门文章
- 【QT】编译QtWebEngine(Build QtWebEngine from source)Win10+QT5.7.1_x64+VS2015
- qq如何获取root,如何获取抖音权限
- 【简单入门】使用Babel进行es6转es5
- android界面的规范性,IOS和Android规范,UI看什么?(三)
- SEO检测网站,看网站是否具备SEO架构!!
- 软考知识点——结构化语言描述加工逻辑
- mysql复合索引单列索引
- 罗永浩宣布退网创业;谷歌研究员“走火入魔”事件曝光:认为AI已具备人格,被罚带薪休假;Wasmer 2.3 发布|极客头条
- win10如何打开摄像头_Win10专业版如何开启自带录屏功能?Win10录屏功能的开启方法...
- win10安装MinGW-W64的一点心得