java堆内存大于TOP
java heap memory is larger than TOP
我的程序 运行 带有 -Xms10240m -Xmx10240m。我用top查看内存,大小是3.5g,比xms的值还小。
use top
但是,当我使用 jmap -heap 时,我可以看到堆大小约为 10g。
use jmap
这是什么原因?
谢谢。
- -Xms 选项用于 JVM 最小堆大小定义
- top 显示使用的实际内存(VIRT/RES/SHR)进程
使用你的例子-Xms10g -Xmx10g
,当jvm启动时,它会要求操作系统分配10g内存用于堆。 并且操作系统会尝试为 JVM 分配内存(显示为 VIRT),但系统没有承诺它会分配物理内存,它可能会交换 ;)
但是你会发现 VIRT 仍然不是 10g,原因是 10g 是用于 heap 大小,JVM 包含更多的堆,例如 stack,permgen( hotspot JDK8, openJDK 好像没有permgen, 错了请指正), native stack, code, files etc.
RES 用于实际物理内存已使用,它包括新对象、方法等,不仅是堆。
我的程序 运行 带有 -Xms10240m -Xmx10240m。我用top查看内存,大小是3.5g,比xms的值还小。 use top
但是,当我使用 jmap -heap 时,我可以看到堆大小约为 10g。 use jmap
这是什么原因?
谢谢。
- -Xms 选项用于 JVM 最小堆大小定义
- top 显示使用的实际内存(VIRT/RES/SHR)进程
使用你的例子-Xms10g -Xmx10g
,当jvm启动时,它会要求操作系统分配10g内存用于堆。 并且操作系统会尝试为 JVM 分配内存(显示为 VIRT),但系统没有承诺它会分配物理内存,它可能会交换 ;)
但是你会发现 VIRT 仍然不是 10g,原因是 10g 是用于 heap 大小,JVM 包含更多的堆,例如 stack,permgen( hotspot JDK8, openJDK 好像没有permgen, 错了请指正), native stack, code, files etc.
RES 用于实际物理内存已使用,它包括新对象、方法等,不仅是堆。