linux应用实际内存大于 jvm xmx
文章来源: http://www.cnblogs.com/guozp/p/7845605.html
1、虽然你jvm参数设置了-Xms6g -Xmx6g,但操作系统不并会马上分配6G的物理内存,而是确实要使用了才分配。所以就内存使用率在应用启动的时候,就相对较低,后续会出现攀爬现象。
2、为什么我们系统进程占用的物理内存(Res/Rss)会远远大于设置的Xmx值,比如Xmx设置1.7G,但是top看到的Res的值却达到了3.0G?
-Xms :初始堆大小 此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmx :最大堆大小
以上配置只用于指定Java heap的大小,不包括持久代,也不包括CodeCache和堆外内存,JVM本身,还有一些其他内存也不会算在内等,你看的“占用内存量”是进程的private working set,这包括该进程所有独占(不与其它进程共享)的内存,不只是Java heap,因此理论上我们看到物理内存大于Xmx也是可能的,不过超过太多估计就可能有问题了。
或者这么理解:
JVM的内存分为两部分,本地内存+Heap内存(Java程序在运行过程中的对象是保存在JVM的堆内存中的) ,首先JVM本身是一个应用程序,一般是通过C、C++实现的,这个程序要运行,是一定要向操作系统申请内存的,维持这个进程正常运行的内存,即可以理解成本地内存。
JVM本身要对堆内存进行维护和管理,还负责垃圾回收,这些也同时会消耗本地内存,JVM在启动过程中,会依赖一些动态库,这同样也消耗本地内存。
-Xmx 这个只是用于设置堆内存的大小,而JVM运行过程中到底会向操作系统申请多少内存,这个是由JVM在运行过程中动态决定的,我们无法设置
文章来源: http://www.cnblogs.com/guozp/p/7845605.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?