iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >怎么用JOL测量对象真实的内存大小
  • 269
分享到

怎么用JOL测量对象真实的内存大小

2023-06-17 05:06:52 269人浏览 薄情痞子
摘要

本文小编为大家详细介绍“怎么用JOL测量对象真实的内存大小”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用JOL测量对象真实的内存大小”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。介绍一款工具(memory

本文小编为大家详细介绍“怎么用JOL测量对象真实的内存大小”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用JOL测量对象真实的内存大小”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

介绍一款工具(memory-measurer)可方便的测量一个对象真实占用内存大小 如有这么一个User对象

public class User {     private Integer id;     private String mobile;     private Date createTime; }

先看一个空User对象的内存占用量

User u = new User(); System.out.println(MemoryMeasurer.measureBytes(u)); //24 System.out.println(ObjectGraphMeasurer.measure(u)); //Footprint{Objects=1, References=3, Primitives=[]}

可知一个对象 三个引用 共占了24字节

逐个赋值后占用内存是多少呢?

// 给id赋值 Integer id = new Integer(1); System.out.println(MemoryMeasurer.measureBytes(id)); // 16  u.setId(id); System.out.println(MemoryMeasurer.measureBytes(u)); // 40 System.out.println(ObjectGraphMeasurer.measure(u)); //Footprint{Objects=2, References=3, Primitives=[int]}

一个Integer对象占用16字节 于是给id赋值后 user对象变成了24+16=40字节了。

// 给mobile赋值 String mobile = "13600000001";     System.out.println(MemoryMeasurer.measureBytes(mobile)); // 64 u.setMobile(mobile); System.out.println(MemoryMeasurer.measureBytes(u)); // 104 System.out.println(ObjectGraphMeasurer.measure(u)); //Footprint{Objects=4, References=4, Primitives=[int x 2, char x 11]}

一个11位长的mobile字符串对象占用了64字节,于是user对象变成了40+64=104字节

// 给createTime赋值 Date createTime = new Date(); System.out.println(MemoryMeasurer.measureBytes(createTime)); // 24字节 u.setCreateTime(createTime); System.out.println(MemoryMeasurer.measureBytes(u)); // 128 System.out.println(ObjectGraphMeasurer.measure(u)); //Footprint{Objects=5, References=5, Primitives=[int x 2, long, char x 11]}

可知一个Date对象占用了24字节, 于是全部属性不为空的一个User对象占用内存为128字节。

另外还可以通过另外一个工具--JOL (Java Object Layout)--可知更详细的Footprint信息

通过上面的工具我们只是知道一个空User对象占用了24字节以及简单的

Footprint{Objects=1, References=3, Primitives=[]}

通过此工具可知这24个字节是怎么分配的了

System.out.println(ClassLayout.parseClass(User.class).toPrintable());  memorymeasurer.User object internals:  OFFSET  SIZE    TYPE DESCRIPTioN                    VALUE       0    12         (object header)                N/A      12     4 Integer User.id                        N/A      16     4  String User.mobile                    N/A      20     4    Date User.createTime                N/A Instance size: 24 bytes Space losses: 0 bytes internal + 0 bytes external = 0 bytes total

上面我们知道一个Integer对象占用了16字节 看这16个字节是怎么分配

System.out.println(ClassLayout.parseClass(Integer.class).toPrintable());  java.lang.Integer object internals:  OFFSET  SIZE  TYPE DESCRIPTION                    VALUE       0    12       (object header)                N/A      12     4   int Integer.value                  N/A Instance size: 16 bytes Space losses: 0 bytes internal + 0 bytes external = 0 bytes total

上面我们知道一个11位长的String对象占用了64字节 看其是怎么分配的

System.out.println(ClassLayout.parseClass(String.class).toPrintable());  java.lang.String object internals:  OFFSET  SIZE   TYPE DESCRIPTION                    VALUE       0    12        (object header)                N/A      12     4 char[] String.value                   N/A      16     4    int String.hash                    N/A      20     4        (loss due to the next object alignment) Instance size: 24 bytes Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

即一个空String对象占用了24字节

System.out.println(ClassLayout.parseClass(char[].class).toPrintable());  [C object internals:  OFFSET  SIZE  TYPE DESCRIPTION                    VALUE       0    16       (object header)                N/A      16     0  char [C.<elements>                  N/A Instance size: 16 bytes Space losses: 0 bytes internal + 0 bytes external = 0 bytes total

一个长度为0的char数组占了16字节 于是11位长的char数组占用字节为: 16+2*11=38 因为需要按8字节对齐 于是还得加上2字节的填充符  于是变成了40字节。 所以一个11位长的字符串的占用字节为24+40=64

补充

memory-measurer如何使用

git clone https://GitHub.com/msteindorfer/memory-measurer cd memory-measurer mvn clean install

pom文件中添加依赖

<dependency>             <groupId>com.github.msteindorfer</groupId>             <artifactId>memory-measurer</artifactId>             <version>0.1.0-SNAPSHOT</version>         </dependency>

运行时时显式添加vm参数 如

-javaagent:/Users/zhugw/workspace/memory-measurer/target/memory-measurer-0.1.0-SNAPSHOT.jar

jol使用说明

只需添加依赖

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

读到这里,这篇“怎么用JOL测量对象真实的内存大小”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: 怎么用JOL测量对象真实的内存大小

本文链接: https://www.lsjlt.com/news/287174.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用JOL测量对象真实的内存大小
    本文小编为大家详细介绍“怎么用JOL测量对象真实的内存大小”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用JOL测量对象真实的内存大小”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。介绍一款工具(memory...
    99+
    2023-06-17
  • 怎么用C#内存Graphics对象
    本篇内容主要讲解“怎么用C#内存Graphics对象”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C#内存Graphics对象”吧!SetBackgroundBitmap函数首先将窗体背景...
    99+
    2023-06-17
  • linux怎么查看内存条数量和大小
    在Linux系统中,可以使用命令行工具来查看内存条的数量和大小。以下是几种常用的方法: 使用dmidecode命令: sudo ...
    99+
    2023-10-24
    linux
  • redis 限制内存使用大小的实现
    记录一次生产环境问题排查过程: 生产环境部署方式:nginx + uwsgi + flask 问题描述: 发现生产环境中之前正常运行的服务突然不可用了,查看程序日志发现部分接口访问...
    99+
    2024-04-02
  • ubuntu系统的内存大小怎么看
    这篇文章主要讲解了“ubuntu系统的内存大小怎么看”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ubuntu系统的内存大小怎么看”吧!1.首先,我们进入ubuntu桌面。2.alt+f2打...
    99+
    2023-07-04
  • python怎么查找任何对象的大小
    这篇文章主要介绍python怎么查找任何对象的大小,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!查找任何对象的大小默认的sys模块包含一个getsizeof函数,该函数接受一个对象并返回其字节大小。对象可以是任何类型...
    99+
    2023-06-27
  • python怎么检查对象的内存使用情况
    小编给大家分享一下python怎么检查对象的内存使用情况,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!检查对象的内存使用情况使用sys.getsizeof()可以检查对象的内存使用情况:import sys&nb...
    99+
    2023-06-27
  • Python的对象拷贝和内存布局怎么实现
    前言你知道下面一些程序片段的输出结果吗?a = [1, 2, 3, 4] b = a print(f"{a = } \t|\t {b = }") a[0] = 100 print(f"{a = } \t|\t ...
    99+
    2023-05-15
    Python
  • Linux中怎么查询内存的真实利用率
    这期内容当中小编将会给大家带来有关Linux中怎么查询内存的真实利用率,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看. ...
    99+
    2023-06-13
  • linux怎么查看redis占用内存大小
    要查看Redis占用的内存大小,可以使用以下方法:1. 登录到Redis服务器。2. 执行`redis-cli`命令,启动Redis...
    99+
    2023-09-01
    redis linux
  • ubuntu怎么查询程序占用的内存大小
    ubuntu查询程序占用内存大小的方法:使用快捷键Ctrl+Alt+t打开终端。输入以下命令即可查到相关信息,命令如下://方法一#ps aux 返回的结果中VSZ(或VSS)列表示程序占用了多少虚拟内存,RSS列表示程序占用了多少物理内存...
    99+
    2024-04-02
  • C语言结构体的内存对齐与大小怎么计算
    这篇文章主要讲解了“C语言结构体的内存对齐与大小怎么计算”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言结构体的内存对齐与大小怎么计算”吧!结构体的内存对齐1、计算结构体的大小struc...
    99+
    2023-06-30
  • 云服务器内存大小怎么选的
    云服务器的内存大小选择是个技术性问题,需要考虑多种因素,包括服务器的负载、应用程序负载、硬件配置等。在选择云服务器内存大小时,通常需要考虑以下因素: 服务器的负载:假设你的应用程序负载很高,并且你希望使用内存来处理它们,那么选择比实际需...
    99+
    2023-10-26
    内存大小 服务器
  • 云服务器内存大小怎么看的
    云服务器的内存大小是一个计算机资源,它可以通过使用内存管理器来查看,以下是一些关于查看云服务器内存大小的方法: 使用CPU-Z或GPU-Z等工具来查看。 使用 Windows 自带的 GPU 功能查看。 使用 CPU 内存检测工具,如:...
    99+
    2023-10-26
    怎么看 内存大小 服务器
  • JavaScript的内置对象怎么用
    这篇“JavaScript的内置对象怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“J...
    99+
    2024-04-02
  • JAVA中内存块对象的Lua怎么封装
    本篇内容主要讲解“JAVA中内存块对象的Lua怎么封装”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA中内存块对象的Lua怎么封装”吧!对于 3d 库来说,API 涉及大量的内存块的操作。...
    99+
    2023-06-04
  • 云服务器内存大小怎么选的啊
    可以选择使用更多内存空间的服务器,这样可以提高服务器的性能,减少内存占用量;2. 可以考虑使用云服务器专用内存,这可以使服务器运行效率更高,减少浪费,提高内存使用率;3. 建议选择支持多内存的云服务器,因为云服务器通常会使用更多的内存空间...
    99+
    2023-10-27
    内存大小 服务器
  • 怎么在Docker中配置tomcat的内存大小
    怎么在Docker中配置tomcat的内存大小?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、挂载docker中的配置文件通过将docker中tomcat的c...
    99+
    2023-06-14
  • 云服务器内存大小怎么看的到
    如果您使用的是云服务器,以下是一些方法可以帮助您查看云服务器内存大小: 使用内存分析工具:这些工具可以告诉您当前使用的内存大小以及您计算的大小。例如,您可以使用 Pure MySQL 内存分析工具来检查数据库表中的缓存大小,或者使用 P...
    99+
    2023-10-27
    怎么看 内存大小 服务器
  • 云服务器内存大小怎么选择的
    云服务器内存大小的选择取决于服务器的需求和资源情况。以下是一些常见的内存选择方法,供您参考: CPU:您的应用程序通常需要运行大量计算任务,因此您需要选择一台能够满足需求的CPU。您可以使用主流的四核或更多核的CPU,或者根据实际需求选...
    99+
    2023-10-27
    内存大小 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作