8年开发架构师浅析SpringBoot的JVM的内存占用与Docker-spring

JVM将其内存分为两大类:堆内存和非堆内存。堆内存是人们通常最熟悉的部分。它是存储由应用程序创建的对象的位置。它们一直存在,直到它们不再被引用并被垃圾收集。通常,应用程序使用的堆量将根据当前负载而波动。

JVM的非堆内存分为几个不同的区域。我们可以使用HotSpot VM的本机内存跟踪(NMT)来检查这些区域的内存使用情况。请注意,虽然NMT不跟踪所有原生本机Native内存使用情况(例如,它不跟踪第三方本机代码内存分配),但对于大类典型的Spring应用程序来说已经足够了。可以通过启动应用程序-XX:NativeMemoryTracking=summary然后使用jcmd VM.native_memory summary来显示内存使用情况摘要来使用NMT 。

让我们通过查看应用程序来说明NMT的使用,在这种情况下,我们的老朋友Petclinic。下面的饼图显示了当使用48MB最大堆(-Xmx48M)启动Petclinic时由NMT报告的JVM的内存使用量(减去其自身的开销):

正如您所看到的,非堆内存占绝大多数JVM的内存使用量,堆内存仅占总数的六分之一。在这种情况下,大约44MB(垃圾收集后立即使用33MB)。非堆内存使用总量为223MB。

本机Native内存区域


  • 压缩类空间:用于存储有关已加载的类的信息。受到约束MaxMetaspaceSize。已加载的类数的函数。

  • 线程:JVM中线程使用的内存。正在运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值