项目拓展-Jol分析本地对象or缓存的内存占用

Jol可在开发过程中对数据两极进行评估判断是否可以使用本地缓存

依赖

复制代码
<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>0.16</version>
</dependency>

测试类

复制代码
@Test
void test4() {

    List<IpBlacklistVO> ipBlacklistVOS = ipBlacklistDao.queryAllIp();
    log.info("数据:{}", ipBlacklistVOS);
    
    log.info("单个IpBlacklistVO内存布局:\n{}",
    ClassLayout.parseClass(IpBlacklistVO.class).toPrintable());
    
    // 分析整个列表内存占用
    log.info("列表总内存占用: {} bytes",
    GraphLayout.parseInstance(ipBlacklistVOS).totalSize());
    
    // 可选: 查看详细内存分布
    log.info("详细内存分布:\n{}",
    GraphLayout.parseInstance(ipBlacklistVOS).toFootprint());
}

输出

单个占用内存

复制代码
[2025-05-07 12:18:33,260][INFO ][main] 单个IpBlacklistVO内存布局:
net.lab1024.sa.admin.module.phabusiness.ipblacklist.domain.vo.IpBlacklistVO object internals:
OFF  SZ               TYPE DESCRIPTION               VALUE
  0   8                    (object header: mark)     N/A
  8   4                    (object header: class)    N/A
 12   4   java.lang.String IpBlacklistVO.ip          N/A
Instance size: 16 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total

列表占用内存

复制代码
[2025-05-07 12:18:33,330][INFO ][main] 列表总内存占用: 267472 bytes (TestDelete.java:89)

内存详细分布

复制代码
[2025-05-07 12:18:33,398][INFO ][main] 详细内存分布:
java.util.ArrayList@1343b038d footprint:
     COUNT       AVG       SUM   DESCRIPTION
      3483        32    111456   [B
         1     16672     16672   [Ljava.lang.Object;
      3483        24     83592   java.lang.String
         1        24        24   java.util.ArrayList
      3483        16     55728   net.lab1024.sa.admin.module.phabusiness.ipblacklist.domain.vo.IpBlacklistVO
     10451              267472   (total)
相关推荐
我是唐青枫9 小时前
Kotlin 运算符重载详解:为什么 a += b 有时改对象,有时换对象?
开发语言·kotlin
小蓝波9 小时前
docker 的命令
java·docker·容器
2zcode9 小时前
基于MATLAB图像处理的饮料瓶识别与价格显示系统设计与实现
开发语言·图像处理·matlab
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题 第155题】【06_Spring篇】第15题:Spring 如何解决循环依赖问题?
java·spring·循环依赖·三级缓存·aop代理
骑士雄师9 小时前
大模型:临时会话
开发语言·python
唐青枫9 小时前
Java Maven 实战指南:从 POM、依赖管理到多模块构建
java
硕风和炜9 小时前
【LeetCode: 1301. 最大得分的路径数目 + DP】
java·算法·leetcode·动态规划·dp·记忆化搜索
XLYcmy10 小时前
核内调度问题的分层优化:缓存管理与性能均衡策略 模型评价 模型缺点与改进方向
缓存·ai·启发式算法·图神经网络·遗传算法·数模·模拟退火
SamDeepThinking10 小时前
面向对象真正管理的,不是对象,而是依赖
java·后端·程序员
我会尽全力 乐观而坚强10 小时前
MySQL库与表的操作
linux·数据库·mysql