繁体   English   中英

java最大堆大小和OS最高输出

[英]java max heap size and OS top output

我正在尝试运行jar文件,但我想处理jvm max heap size。 大小我使用-Xmx80m参数,以设置最大头大小80MB。

我使用我的linux操作系统的“top”命令监视我的应用程序的内存分配,我很惊讶jvm使用的内存比我用-Xmx param指定的内存多(java -Xmx80m -jar myapp.jar)。 更具体地说,从我的顶级输出

VIRT:257米
RES:109米

我认为RES应该是最大80mb,如果我的应用程序需要超过80mb jvm将抛出异常“内存不足”(或类似的东西)

在我的应用程序中,我正在使用外部库。 除了我用param指定的堆之外,这个库是否使用自己的内存?

在任何情况下,我怎么能限制jvm的内存使用量,以免克服我用参数设置的内容?

更新:
使用ulimit(unix命令)来限制JVM使用的资源是一个很好的解决方案吗?

我正在使用:

java版“1.7.0_02”
Java(TM)SE运行时环境(版本1.7.0_02-b13)
Java HotSpot(TM)服务器VM(内置22.0-b10,混合模式)

在fedora 8 pc上

您不应期望-Xmx会对JVM使用的总内存施加硬约束。

-Xmx限制Java堆的大小。 Java堆外的任何内存都不受此限制的约束。 这包括代码,类元数据,常量池等。

您可以调整的另一件事是永久空间的大小( -XX:MaxPermSize ),因为它不包含在-Xmx

-mx-Xmx选项设置最大堆大小。 此虚拟内存在启动时分配,并在程序运行时使用。 正如@aix所说,非堆内存可以更多。

外部本机库将使用其自己的非堆内存。 最大值将限制所有库中的堆。 (它预先分配,不能增加)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM