项目拓展-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)
相关推荐
yi碗汤园1 小时前
【一文了解】C#的StringSplitOptions枚举
开发语言·前端·c#
帧栈2 小时前
开发避坑指南(58):Java Stream 按List元素属性分组实战指南
java
无敌最俊朗@2 小时前
C++ 序列容器深度解析:vector、deque 与 list
开发语言·数据结构·数据库·c++·qt·list
Da Da 泓2 小时前
LinkedList模拟实现
java·开发语言·数据结构·学习·算法
海琴烟Sunshine2 小时前
Leetcode 14. 最长公共前缀
java·服务器·leetcode
城管不管3 小时前
Lambda
java
喃寻~3 小时前
java面试
数据库·sql·mysql
Humbunklung3 小时前
VC++ 使用OpenSSL创建RSA密钥PEM文件
开发语言·c++·openssl
Humbunklung3 小时前
填坑:VC++ 采用OpenSSL 3.0接口方式生成RSA密钥
开发语言·c++·rsa·openssl 3.0
龙茶清欢3 小时前
5、urbane-commerce 微服务统一依赖版本管理规范
java·运维·微服务