diff --git a/source/_posts/other/使用jolcore库查看Java对象大小.md b/source/_posts/other/使用jolcore库查看Java对象大小.md
new file mode 100644
index 0000000..0195a4d
--- /dev/null
+++ b/source/_posts/other/使用jolcore库查看Java对象大小.md
@@ -0,0 +1,97 @@
+---
+title: 使用jolcore库查看Java对象大小
+tags: Java技术
+categories: 技术随笔
+abbrlink: 155251202
+date: 2024-03-06 14:22:05
+keywords:
+description:
+cover:
+---
+
+> 对象大小可以用jolcore包查看,本篇介绍jolcore的基本使用
+
+
+# 引入依赖
+
+```
+
+ org.openjdk.jol
+ jol-core
+ 0.9
+
+```
+# 具体使用
+```
+ClassLayout layout = ClassLayout.parseInstance(new Object());
+System.out.println(layout.toPrintable());
+```
+
+# 测试代码
+```
+import org.openjdk.jol.info.ClassLayout;
+public class JOLSample {
+ public static void main(String[] args) {
+ ClassLayout layout = ClassLayout.parseInstance(new Object());
+ System.out.println(layout.toPrintable());
+ System.out.println();
+ ClassLayout layout1 = ClassLayout.parseInstance(new int[]{1,2,3,4,5});
+ System.out.println(layout1.toPrintable());
+ System.out.println();
+ ClassLayout layout2 = ClassLayout.parseInstance(new A());
+ System.out.println(layout2.toPrintable());
+ }
+ // -XX:+UseCompressedOops 默认开启的压缩所有指针
+ // -XX:+UseCompressedClassPointers 默认开启的只压缩对象头里的类型指针Klass Pointer
+ // Oops:Ordinary Object Pointers
+ //堆内存大于32G时,指针压缩会失效。
+ //堆内存小于4G时,不需要启用指针压缩,jvm会直接去除高32位地址。
+ public static class A {
+ //8B mark word
+ //4B Klass Pointer
+ int id = 6; //4B
+ String name; //4B
+ byte b; //1B
+ Object o; //4B
+ }
+}
+```
+# 打印结果
+
+```
+java.lang.Object object internals:
+ OFFSET SIZE TYPE DESCRIPTION VALUE
+ 0 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) 00 1c 2f c5 (00000000 00011100 00101111 11000101) (-986768384)
+ 12 4 (object header) 9a 02 00 00 (10011010 00000010 00000000 00000000) (666)
+Instance size: 16 bytes
+Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
+
+[I object internals:
+ OFFSET SIZE TYPE DESCRIPTION VALUE
+ 0 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) 68 0b 2f c5 (01101000 00001011 00101111 11000101) (-986772632)
+ 12 4 (object header) 9a 02 00 00 (10011010 00000010 00000000 00000000) (666)
+ 16 4 (object header) 05 00 00 00 (00000101 00000000 00000000 00000000) (5)
+ 20 4 (alignment/padding gap)
+ 24 20 int [I. N/A
+ 44 4 (loss due to the next object alignment)
+Instance size: 48 bytes
+Space losses: 4 bytes internal + 4 bytes external = 8 bytes total
+
+com.locaris.jvm.JOLSample$A object internals:
+ OFFSET SIZE TYPE DESCRIPTION VALUE
+ 0 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) 10 f6 9c c5 (00010000 11110110 10011100 11000101) (-979569136)
+ 12 4 (object header) 9a 02 00 00 (10011010 00000010 00000000 00000000) (666)
+ 16 4 int A.id 6
+ 20 1 byte A.b 0
+ 21 3 (alignment/padding gap)
+ 24 8 java.lang.String A.name null
+ 32 8 java.lang.Object A.o null
+Instance size: 40 bytes
+Space losses: 3 bytes internal + 0 bytes external = 3 bytes total
+```