JVM HeapMemory中Used, Committed and Max的区别 - 麦克斯韦科思

博客园 · · 616 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

首先要明确的是used < committed < max,单位是bytes;

其次,各个值的说明如下:

  • init:JVM启动时从操作系统申请的初始内存,也即JVM参数中-Xms设置的值
  • used: 实际使用的内存,包括未被垃圾回收期回收的不可达对象占用的内存,它可以比初始(init)内存小
  • committed:操作系统层面为当前JVM进程保留的内存
    • 可能等于或大于used内存;JVM可以从操作系统申请很多内存,但是不一定真正使用它,但是操作系统可以为java进程保留相关内存
    • 可能小于init内存,因为JVM可以回收内存并将其归还给操作系统
    • 如果JVM需要更多内存,它将尝试从操作系统申请,此时commited会变大
    • 如果创建一个新对象,并且此时used < committed,这时JVM不需要直接从操作系统申请内存,而是直接使用已经申请好的committed内存,确保新对象能创建成功
    • 如果创建一个新对象,并且总内存使用量已经操作committed值,JVM在创建对象前需要向操作系统申请额外的内存,并且不保证能申请成功,可能出现OOM
  • max:JVM能从操作系统申请的最大内存
    • 该值一般通过JVM参数-Xmx设置
    • 操作系统可能不会为JVM申请这么多的内存,因为操作系统还要为其他进程保留一定的内存,此时可能会导致OOM

本文来自:博客园

感谢作者:博客园

查看原文:JVM HeapMemory中Used, Committed and Max的区别 - 麦克斯韦科思

616 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传