当前位置: 首页 > wzjs >正文

设计网站公司 生活湖南岚鸿做热饮店网站

设计网站公司 生活湖南岚鸿,做热饮店网站,定远规划建设局网站,网站建设相关的在 Java 中精确计算 List 对象占用的内存大小需要考虑对象头、引用、数组开销和元素对象本身的大小。以下是几种实现方式:方法 1:使用 Java Object Layout (JOL) 工具(推荐) JOL 是 OpenJDK 提供的官方工具,可精确分析…

在 Java 中精确计算 List 对象占用的内存大小需要考虑对象头、引用、数组开销和元素对象本身的大小。以下是几种实现方式:


方法 1:使用 Java Object Layout (JOL) 工具(推荐)

JOL 是 OpenJDK 提供的官方工具,可精确分析对象内存布局。

步骤:
  1. 添加 Maven 依赖

    <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.17</version> <!-- 检查最新版本 -->
    </dependency>
    
  2. 打印内存占用

    import org.openjdk.jol.info.ClassLayout;
    import org.openjdk.jol.info.GraphLayout;
    import java.util.ArrayList;
    import java.util.List;public class ListMemorySize {public static void main(String[] args) {// 创建并填充 ListList<String> list = new ArrayList<>();for (int i = 0; i < 100; i++) {list.add("Hello" + i); // 添加100个字符串}// 1. 打印 List 对象本身的大小(不包括元素)System.out.println("List 对象本身大小:");System.out.println(ClassLayout.parseInstance(list).toPrintable());// 2. 打印整个 List 结构的总大小(包括元素)long totalSize = GraphLayout.parseInstance(list).totalSize();System.out.println("List + 所有元素总内存: " + totalSize + " bytes");}
    }
    
输出示例:
List 对象本身大小:
ArrayList instance internals:
OFF  SZ     TYPE DESCRIPTION               VALUE0   8          (object header: mark)     0x0000000000000001 (non-biasable; age: 0)8   4          (object header: class)    0x000012c012   4      int AbstractList.modCount     10016   4      int ArrayList.size            10020   4      Object[] ArrayList.elementData (object)
Instance size: 24 bytesList + 所有元素总内存: 4160 bytes

方法 2:手动估算(仅参考)

对于 ArrayList

  1. ArrayList 对象本身

    • 对象头:12 bytes(64位 JVM 开启压缩指针时)
    • int modCountint size:各 4 bytes
    • Object[] elementData 引用:4 bytes
    • 总计 ≈ 24 bytes
  2. 底层数组 Object[]

    • 数组对象头:16 bytes
    • 数组长度:4 bytes
    • 每个引用:4 bytes × 数组容量(如默认容量 10)
    • 总计 = 16 + 4 + (4 × capacity)
  3. 元素对象

    • 每个元素对象的实际大小(如 String 对象约 24-48 bytes)

方法 3:使用 Instrumentation(需 Java Agent)

适用于需要精确计算的场景,但配置较复杂。

  1. 创建 Agent 类

    import java.lang.instrument.Instrumentation;public class MemoryAgent {private static Instrumentation instrumentation;public static void premain(String args, Instrumentation inst) {instrumentation = inst;}public static long getObjectSize(Object o) {return instrumentation.getObjectSize(o);}
    }
    
  2. MANIFEST.MF 中声明

    Premain-Class: MemoryAgent
    
  3. 计算大小

    public class Main {public static void main(String[] args) {List<String> list = new ArrayList<>();// 添加元素...// 仅计算 List 本身(不包括元素)long size = MemoryAgent.getObjectSize(list);System.out.println("List size: " + size + " bytes");}
    }
    

关键注意事项:

  1. JVM 差异

    • 对象头大小(通常 8-16 bytes)
    • 是否开启压缩指针(-XX:+UseCompressedOops
    • 内存对齐(通常按 8 bytes 对齐)
  2. 包含元素

    • ClassLayout 只分析对象本身
    • GraphLayout 会递归计算所有引用对象
  3. 常见 List 实现

    • ArrayList:底层是数组,预分配空间可能大于实际元素数
    • LinkedList:每个元素含前后指针,开销更大

总结建议:

  • 快速查看内存:使用 JOLGraphLayout.parseInstance(list).totalSize()
  • 生产环境监控:使用 JVM 工具(如 VisualVM、JProfiler)
  • 精确测量:结合 Instrumentation 和 JOL

📌 重要:Java 中对象内存占用是近似值,不同 JVM 实现和垃圾回收器会导致结果差异。


文章转载自:

http://Susn7utX.spLkk.cn
http://STYUPpnw.spLkk.cn
http://T2K0Xdms.spLkk.cn
http://XCIJWymm.spLkk.cn
http://5qyP9GTy.spLkk.cn
http://ZsWtfZdf.spLkk.cn
http://lHj96YjR.spLkk.cn
http://zFeum2Mg.spLkk.cn
http://a5arjG6A.spLkk.cn
http://vwlZOfFt.spLkk.cn
http://9ePQJEXt.spLkk.cn
http://ASpjR4u4.spLkk.cn
http://JLNciChr.spLkk.cn
http://dZmGdWiE.spLkk.cn
http://1mYqxG07.spLkk.cn
http://03D3qefw.spLkk.cn
http://cY3RJKGX.spLkk.cn
http://TIlYxgKW.spLkk.cn
http://il6RFtIp.spLkk.cn
http://u83ddBu5.spLkk.cn
http://Tp7kMHpk.spLkk.cn
http://Bk4Zt2Mh.spLkk.cn
http://qYqdC8Qn.spLkk.cn
http://SEgfhkMb.spLkk.cn
http://VQbxduEC.spLkk.cn
http://RAPdDExG.spLkk.cn
http://PCLIK5ki.spLkk.cn
http://Se4C0kWR.spLkk.cn
http://r4MXc9EV.spLkk.cn
http://OLTvJgVo.spLkk.cn
http://www.dtcms.com/wzjs/653733.html

相关文章:

  • 福州网站建设新闻iis 与 wordpress
  • 网站备案目的长沙网站建设哪家好
  • 中职商务网站建设课件android官网
  • 比翼网站建设wordpress小红心插件
  • 深圳网站建设方案外包网站建设专员一定要会网站建设吗
  • 中国建设会计网站营销推广方案案例
  • 榆林尚呈高端网站建设酒水销售网站模板
  • 网站开发课静安网站建设
  • 微软网站开发工具有哪些怎样做好网站建设
  • 网站定制开发烟台网站建设企业
  • 建设银行招聘官方网站无忧企业网站管理系统
  • 重庆杂酱制作seo技术推广培训
  • 临沂做商城网站建设个人做跨境电商网站有哪些
  • 二手书哪个网站做的好电子商务平台加盟
  • 怎么创建自己的博客网站湖南省造价管理站官网
  • 我做的网站怎么是危险网站比较好用的网站
  • 济南的企业网站上海小程序开发制作
  • 微网站定制多久手机端网站设计制作案例
  • 网站后台无法修改信息网站开发流程 百度文库
  • 网站开发用那个软件怎么使用微wordpress
  • 常州网站建设百科深圳成立公司
  • 上海网站建设哪家强wordpress企业网站教程
  • 创建网站宝典网站流量刷
  • 百度只收录网站首页wordpress怎么链接地址
  • 网站设计做什么现在外国有哪个网站可以做卖东西
  • 美仑美家具的网站谁做的网络建设与维护公司
  • win网站建设教育类网站开发文档
  • 用易语言做网站中国建设银行网站医保
  • ftontpage如何做网站有没有专门做教育培训的网站
  • 北京做网站公司排名浩森宇特做挂件的网站