惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
美团技术团队
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
T
Tailwind CSS Blog
U
Unit 42
C
Check Point Blog
S
SegmentFault 最新的问题
Martin Fowler
Martin Fowler
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
腾讯CDC
罗磊的独立博客
小众软件
小众软件
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
DataBreaches.Net

崔八由

内网设备被挖矿了 对华宸未来债券基金更名的总结 凸(艹皿艹 ) 推特被封了 第一次装机过程与记录 记录一下今年治牙的过程 预测未来 最终还是投向了obsidian pve lxc容器使用vnpy的问题 扔垃圾的感受 解决macos sierra重新安装时报错-准备安装时发生错误 记录一下使用vercel搭建umami中需要注意的地方 还是不能太依赖自建服务 Android应用在上架Google Play时封闭式测试的一些建议 acme.sh自动生成泛域名证书的几个坑 老了 go学习笔记之指针 pve主机使用smart_ctl监控磁盘信息 tailscale的设置与安装 go中获取某个包下定义的所有变量
JVM中的Shallow Size 和 Retained Size解释
崔八由 · 2024-09-27 · via 崔八由

发表于|更新于|编程java

|浏览量:|

在使用相关的JVM内存工具查看堆栈情况时, 有两个指标Shallow SizeShallow Size不是很清楚其真正含义,现在通过一个例子来了解其含义。

先说一下概念描述:

  • shallow size: 对象自身占用的内存, 不包括它引用的其他实例。例如,对于一个简单的对象,如果它有几个基本数据类型的字段和对其他对象的引用,那么该值只计算这些字段所占的空间,而不计算被引用对象的空间
  • retained size: 当实例A被回收时, 可以同时被回收的实例的Shallow Size之和

示例代码很简答, 构造一个List,然后插入100万个元素, 在程序运行的过程中使用IDEA自带的Profiler来获取堆栈快照,后面的一个无限循环是为了防止程序运行完终止。

1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) throws Exception {
List<Integer> l = new ArrayList<>();
for (int i=0; i < 1000000; i++){
l.add(i);
}
while (true){
TimeUnit.SECONDS.sleep(3);
System.out.println("sdsdsds");
}
}

结果如下图所示:

可以看到,List实例的shallow size很小,因为其代表本身这个List对象占用的内存,不包含其引用的100万的Integer对象, 而retained size很大,接近29M。

在此处, 想验证一下long类型和int类型各自占用的空间占用区别有多大。

将Integer改成了Long, 其他不变,观察retained size,接近33M,和int的差距不是很大。


avatar

七只鸟离开了夏天,飞向了秋天