JOL工具类查看Java对象整体结构信息
JOL工具类查看Java对象整体结构信息
使用JOL工具类查看对象整体结构信息。引入依赖,RELEASE版本即可,案例当前使用的RELEASE版本对应是0.17。
<!-- JOL工具类查看对象的整体结构信息 -->
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>RELEASE</version>
</dependency>
写一个公共输出类
import org.openjdk.jol.info.ClassLayout;
public class Worker {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public String getPassword() {
return password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setId(Integer id) {
this.id = id;
}
@Override
public String toString() {
return super.toString();
}
public static void printf(Worker worker) {
// JOL工具类查看对象的整体结构信息
System.out.println(ClassLayout.parseInstance(worker).toPrintable());
}
}
定义测试类测试打印输出
public class Test {
public static void main(String[] args) {
Worker work = new Worker();
// 输入信息
System.out.println(work.hashCode());
System.out.println(work);
// 输出信息
Worker.printf(work);
}
}
输出内容如下:
1198108795
com.haokai.common.jvm.Worker@4769b07b
com.haokai.common.jvm.Worker object internals:
OFF SZ TYPE DESCRIPTION VALUE
0 8 (object header: mark) 0x0000004769b07b01 (hash: 0x4769b07b; age: 0)
8 4 (object header: class) 0xf800c143
12 4 java.lang.Integer Worker.id null
16 4 java.lang.String Worker.username null
20 4 java.lang.String Worker.password null
Instance size: 24 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
上述结果:
1198108795:表示哈希码
OFF:表示偏移量
SZ:占用的字节量的大小
TYPE DESCRIPTION:类型描述
VALUE:值
object header:对象头
Space losses:空间损失(内部0字节+外部0字节=总计0字节)