项目拓展-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 VALUE0 8 (object header: mark) N/A8 4 (object header: class) N/A12 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 DESCRIPTION3483 32 111456 [B1 16672 16672 [Ljava.lang.Object;3483 24 83592 java.lang.String1 24 24 java.util.ArrayList3483 16 55728 net.lab1024.sa.admin.module.phabusiness.ipblacklist.domain.vo.IpBlacklistVO10451 267472 (total)