码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 空间占用计算


    空间占用计算

    • 背景
    • 研究
    • agent测试对象占用空间大小
    • 疑问
    • 参考

    背景

    1、最近同事有提出一个性能优化场景,就是异步定时发送数据埋点时,每次都会触发GC,然后他分析了之后,说是数据类型选择不当导致的,String应该改为char,能更省空间一些,然后说了一下开销,听得我一愣一愣的。。。
    2、在内网也有看到一些功能案例里的性能优化,就是对数据结构的调整。例如不适用HashMap,而是改用Netty中的IntObjectHashMap,其中说到的原因是HashMap存在基本类型到包装类型的拆箱装箱开销。。

    研究

    基本类型占用指定的空间大小,例如int占用4个字节
    类对象构成:
    对象头(housekeeping):早期的JVM是8个字节,之后一般对象头为12个字节,数组的话多4个字节,用来存储长度
    类字段:
    1、基本类型字段,固定大小
    2、引用字段,4个字节
    填充对其字段:8字节向上取整

    例如Integer, 一种解释是12字节对象头,4字节基本类型字段;另一种是8字节对象头,4字节基本类型,然后4字节对齐。。

    agent测试对象占用空间大小

    参考文档
    示例demo

    在这个目录下运行run.sh即可
    Person中一个int属性执行后为16,一个Integer执行后也为16。因为后者是引用,也是4个字节。。String也类似。。

    疑问

    String最小空间计算公式为(jdk6)
    Minimum String memory usage (bytes) = 8 * (int) ((((no chars) * 2) + 45) / 8)
    这个45是怎么出来的呢,
    其中有一个7 用来向上取整的
    char[] 数组头 12字节,填充4字节对齐,那么16字节
    string头 8个字节 3个int属性 12字节
    这里如果不对齐,那么就是 36+7=42 如果对其,那么就是 40+7=47。如果char[]数组也不对其,那么就是38或者43,怎么都不会是45。。。

    参考

    1、stackOverFlow类型问题回答
    2、对象内存使用介绍
    3、常见java对象内存使用大小
    4、内存使用大小计算

  • 相关阅读:
    Spring-IOC-@Value和@PropertySource用法
    【树莓派不吃灰】命令篇③ 学习Shell脚本
    Nature Microbiology|溃疡性结肠炎的罪魁祸首:普通拟杆菌的蛋白酶
    JavaScript对象与原型
    不得不会的MySQL数据库知识点(五)
    传输层 四层负载均衡可以做什么?
    Leetcode刷题-(16~20)-Java+Python+JavaScript
    【知识】操作系统题目
    【机器学习搞钱】Treynor-Mazu四因子模型
    ModernCSS.dev - 来自微软前端工程师的 CSS 高级教程,讲解如何用新的 CSS 语法来解决旧的问题
  • 原文地址:https://blog.csdn.net/weixin_42241455/article/details/133959285
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号