Memory management 为什么JVM使用的内存比我分配的要多

Memory management 为什么JVM使用的内存比我分配的要多,memory-management,jvm,Memory Management,Jvm,我使用以下命令启动Java进程: java-Xmx32m-jar-winstone-lite.jar--warfile=myWarFile.war 它没有使用我指定的内存量,而是仍在分配144m 编辑: 当我说allocate时,我的意思是当我查看“top”进程时,我看到144m是正在使用的内存量 我正在使用当前版本 我认为如果我的应用程序需要的内存超过我分配的内存,jvm就会崩溃 -Xmx只是告诉JVM它可以为其内部堆使用多少内存 JVM需要内存用于其他用途(永久生成、临时空间等),此外,与每

我使用以下命令启动Java进程:

java-Xmx32m-jar-winstone-lite.jar--warfile=myWarFile.war

它没有使用我指定的内存量,而是仍在分配144m

编辑: 当我说allocate时,我的意思是当我查看“top”进程时,我看到144m是正在使用的内存量

我正在使用当前版本


我认为如果我的应用程序需要的内存超过我分配的内存,jvm就会崩溃

-Xmx
只是告诉JVM它可以为其内部堆使用多少内存

JVM需要内存用于其他用途(永久生成、临时空间等),此外,与每个二进制文件一样,JVM需要空间来存储自己的二进制代码,以及任何库/dll/。因此,JVM需要加载

您引用的144 MiB可能至少包含一些其他内存使用


你是如何衡量内存使用率的?在使用虚拟内存的现代操作系统上,测量进程的内存使用情况并不是一件小事,不能用单个值来表示。

-Xmx
只告诉JVM它可以为其内部堆使用多少内存

JVM需要内存用于其他用途(永久生成、临时空间等),此外,与每个二进制文件一样,JVM需要空间来存储自己的二进制代码,以及任何库/dll/。因此,JVM需要加载

您引用的144 MiB可能至少包含一些其他内存使用


你是如何衡量内存使用率的?在使用虚拟内存的现代操作系统上,测量进程的内存使用量并不是一件小事,不能用单个值来表示。

我从top命令获得144m。操作系统是ubuntu。@predhme:top显示的值可能包括共享库等,因此它们总是比堆大得多。那么,比较top报告的数量和windows任务管理器报告的值是否不准确呢?特别是因为它们有两个独立的JVM?是的,您有太多不同的变量,比较起来会非常困难。我从顶部命令获取144m。操作系统是ubuntu。@predhme:top显示的值可能包括共享库等,因此它们总是比堆大得多。那么,比较top报告的数量和windows任务管理器报告的值是否不准确呢?特别是因为它们有两个独立的JVM?是的,您有太多不同的变量,比较起来会非常困难。