摘要:本文讲述4种查看java对象所占内存大小的方法

本文分享自华为云社区《查看java对象所占内存大小》,作者:xiewenci。

计算java对象所占内存大小

1.使用jdk8自带API

使用这种jdk8方式时,Open JDK 不是天然支持的,需要set一下环境变量

System.setProperty("java.vm.name","Java HotSpot(TM) ");
System.out.println(ObjectSizeCalculator.getObjectSize(3L));

结果如下:

2. 借助org.apache.lucene工具类

当一个对象有多个属性,需要计算整个对象的大小时,可以借助org.apache.lucene工具类

先引入maven坐标

     <dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency>

测试代码:

     Map<String, String> map = new HashMap<>();System.out.println("map init value is " + RamUsageEstimator.sizeOf(map));for (int i = 0; i < 100; i++) {RandomStringUtils.randomAlphanumeric(100);map.put(RandomStringUtils.randomAlphanumeric(10), RandomStringUtils.randomAlphanumeric(10));}System.out.println("map size 100, value is " + RamUsageEstimator.sizeOf(map));System.out.println("map size 100, value is " + RamUsageEstimator.humanSizeOf(map));

结果如下:

3. 借助jol工具类

如果需要查看某个对象的详细内存分布,可以借助jol工具类,不过这种当对象中内嵌其他对象时,只能计算ClassLayout方法中这个object对象所占内存的大小

先导入maven坐标

     <dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.9</version></dependency>

测试代码:

System.out.println(ClassLayout.parseInstance(23L).toPrintable());

结果如下:

4. java对象内存分布

最后,计算一个对象占用多大内存,需要提前了解java对象的布局。

点击关注,第一时间了解华为云新鲜技术~

4种方法教你如何查看java对象所占内存大小相关推荐

  1. 如何查看java对象所占内存大小

    有时候我们需要对比看那种数据结构的Java对象占用的内存比较少,这时候我们就需要查看内存大小. 借助org.apache.lucene工具类 当一个对象有多个属性,需要计算整个对象的大小时,可以借助o ...

  2. 检测Java对象所占内存大小 (转载)

    2019独角兽企业重金招聘Python工程师标准>>> Don't pay the price for hidden class fields By Vladimir Roubtso ...

  3. 如何计算Java对象所占内存的大小

    摘要 本文以如何计算Java对象占用内存大小为切入点,在讨论计算Java对象占用堆内存大小的方法的基础上,详细讨论了Java对象头格式并结合JDK源码对对象头中的协议字段做了介绍,涉及内存模型.锁原理 ...

  4. 仅仅有人物没背景的图片怎么弄_只会画人物不会画背景?这3种方法教你快速画背景!...

    原标题:只会画人物不会画背景?这3种方法教你快速画背景! 很多同学只会画人物不会画背景,于是就想到了一些骚操作-- 1.万年"留白"党:不会画干脆就不画,一片白板走天下! 喂喂喂, ...

  5. Android电视kodi安装失败,电视提示“解析包出现错误” ?四种方法教你轻松解决...

    原标题:电视提示"解析包出现错误" ?四种方法教你轻松解决 日常生活中,我们经常会遇到智能电视提示:解析包时出现错误.遇到这样的问题,不要抓狂,小智教你轻松解决. 首先,我们要清楚 ...

  6. 属性和方法的区别是什么_微信被拉黑和被删除,有什么区别?两种方法教你辨别...

    微信作为目前使用最广泛的一种社交聊天工具,几乎成为了智能手机的必备软件.它除了为我们的日常生活带来诸多便利之外,相信许多都是对它又爱又恨.其中最让人反感的一点就是,对方明明已经早已将自己拉黑或者删除了 ...

  7. 无法从计算机选择图片,碰到“照片无法读取”,2种方法教你轻松修复受损照片...

    原标题:碰到"照片无法读取",2种方法教你轻松修复受损照片 日常生活中,如果我们发现无法在计算机上正常查看照片, 这就表示该照片无法读取.导致这种情况发生的原因有很多,可能与软件相 ...

  8. 10种方法教你管理销售线索!(下)

    本篇文章是10种方法教你管理销售线索!(上)的下篇,上篇主要是着重于销售线索.销售过程.客户反馈及意向客户的培养. 六.激发销售对每个潜在业务机会的兴趣 销售精英往往更关注精准客户的详细信息,所以这里 ...

  9. 那个软件弹出广告_如何关闭烦人的电脑弹窗广告?5种方法教你轻松解决

    如果要问大家在使用电脑的过程中让人最反感的是什么,我想许多人的回答都会是弹窗广告.一些软件为了给自己创收,完全不顾用户的使用体验,在软件中强行加入广告弹窗模块.这些弹窗广告不仅让人在视觉上烦不胜烦,而 ...

  10. python获取屏幕文字_详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)...

    前言: 今天为大家带来的内容是详解:四种方法教你对Python获取屏幕截图(PyQt , pyautogui)本文具有不错的参考意义,希望能够帮助到大家! Python获取电脑截图有多种方式,具体如下 ...

最新文章

  1. 关于2012年度土建工程专业中级专业技术资格考试有关问题的通知
  2. php表单传值哪几种方式,PHP表单传值的方式有哪些?
  3. IAR不进调试界面DEBUG界面,直接烧写程序。完美解决,还可以添加到工具栏
  4. 分享一个文件上传工具类
  5. linux脚本格式模板,Linux Shell 常见的命令行格式简明总结
  6. jpa怎么传参到in中_Java中如何处理开关状态的属性字段?
  7. 转:集群、分布式、负载均衡区别与联系
  8. mysql结构改写为hbase表_根据mysql表中字段创建hbase表
  9. Insyde uefi 隐藏设置_利用rufus制作Linux/Windows安装启动盘(支持UEFI+GPT)
  10. java小球下落_java基础-小球下落问题
  11. RIME输入法配置双拼方案(Ubuntu下基于ibus)
  12. 教你写简单的黑客程序
  13. DNS 动态域名解析
  14. 切比雪夫不等式例题讲解_浅谈|f(x)|最大值的最小值问题--切比雪夫最佳逼近直线在高考中的应用...
  15. Vulnhub_MoneyBox
  16. Python系列英文原版电子书
  17. STM32单片机CAN总线汽车自动会车灯远近光切换
  18. 2021年中国工业软件行业发展现状分析,行业国产化程度亟待提升「图」
  19. 大专计算机应用论文摘要,计算机应用大专论文摘要怎么写 计算机应用大专论文摘要范文参考...
  20. R语言LDA线性判别分析

热门文章

  1. JPA的cannot simultaneously fetch multiple bags异常的解决
  2. BLC 以及 线性化
  3. java 刽子手图像代码,刽子手游戏代码
  4. WordPress主题制作全过程(八):制作index.php
  5. 【工作小技巧】cmd 批量移动文件
  6. 经纬财富:十堰炒白银有哪些技巧
  7. c语言的矩阵相乘程序,C语言实现两个矩阵相乘
  8. Python打开文件权限及编码方式
  9. 获取163邮箱的邮件 并下载附件
  10. 面向对象(OOP)概念理解,通俗易懂