网站建设的活怎么接,东莞建设工程交易中心门户网站,安阳区号邮编,网站建设公司对比Jol-分析Java对象的内存布局 Open JDK提供的JOL(Java Object Layout)工具为我们方便分析、了解一个Java对象在内存当中的具体布局情况。本文实验环境为64位HotSpot虚拟机。 Java对象的内存布局
Java的实例对象、数组对象在内存中的组成包括#xff1a;对象头、实例数据和内存…Jol-分析Java对象的内存布局 Open JDK提供的JOL(Java Object Layout)工具为我们方便分析、了解一个Java对象在内存当中的具体布局情况。本文实验环境为64位HotSpot虚拟机。 Java对象的内存布局
Java的实例对象、数组对象在内存中的组成包括对象头、实例数据和内存填充。 对象头主要包括Mark Word、Class对象指针数组对象还包括数组长度。Mark Word占有8个字节在Mark Word中记录了哈希码、GC、锁等信息而Class对象指针则指向该实例的Class对象在开启指针压缩的情况下占用4个字节否则占用8个字节数组对象还需要4个字节用于记录数组长度。实例数据区域用于存放该对象的数据。内存填充是指Java对象地址按8字节对齐每个对象所占内存的字节数必须是8字节的整数倍。 实例1
在maven工程中引入JOL相关包
!--分析java对象内存布局--
dependencygroupIdorg.openjdk.jol/groupIdartifactIdjol-core/artifactIdversion0.9/version
/dependency创建测试类
package org.dsg.threads;import lombok.Data;
import org.openjdk.jol.info.ClassLayout;import java.nio.charset.StandardCharsets;/* 演示对象的内存估算 */
public class OomTooManyObjectTest {public static void main(String[] args) {/* 对象本身内存 */System.out.println(ClassLayout.parseInstance(new Product()).instanceSize());//一个字符串占用内存String name 新华社推新作品;System.out.println(ClassLayout.parseInstance(name).instanceSize());System.out.println(16 name.getBytes(StandardCharsets.UTF_8).length);}Dataprivate static class Product{private int id;private String name;private int price;private String desc;}
}输出结果 32 24 37 实例2
创建测试类
package org.dsg.threads;import lombok.Builder;
import lombok.Data;
import org.openjdk.jol.info.ClassLayout;public class OomTooManyObjectTest {public static void main(String[] args) {Product product Product.builder().id(1).name(小汽车).price(180000).desc(长安小汽车很Cool).build();System.out.println(ClassLayout.parseInstance(product).toPrintable());int[] arr {11, 12, 13};System.out.println(ClassLayout.parseInstance(arr).toPrintable());}DataBuilderprivate static class Product{private int id;private String name;private int price;private String desc;}
}输出结果