当前位置: 首页 > 面试题库 >

Java似乎忽略了-Xms和-Xmx选项

汪典
2023-03-14
问题内容

我想在VPS上运行一个用Java编写的非常简单的机器人。我想将jvm内存限制为10MB(我怀疑是否需要更多内存)。

我正在使用以下命令运行机器人:

java -Xms5M -Xmx10M -server -jar IrcBot.jar“ / home / jbot”

但是top表明为Java保留的实际内存是144m(或者我在这里解释错了吗?)。

13614 jbot 17 0 144米 16米6740秒0.0 3.2 0:00.20 java的

有什么想法在这里会出什么问题吗?

Java版本“ 1.6.0_20” Java™SE运行时环境(内部版本1.6.0_20-b02)Java
HotSpot(TM)客户端VM(内部版本16.3-b01,混合模式)

顺便说一句。我正在运行CentOS-如果重要的话。

编辑:谢谢您的回答。

我真的不能接受它们,因为事实证明问题出在我选择编写程序的语言而不是JVM本身。


问题答案:

-Xmx指定最大Java 分配(-Xms指定最小 分配)。Java进程有其自身的开销(实际的JVM等),加上已加载的类和perm
gen空间(通过设置-XX:MaxPermSize=128m)也位于该值之外。

将堆分配仅视为Java的“内部工作空间”,而不是整个过程。

尝试进行实验,您会明白我的意思:

java -Xms512m -Xmx1024m ...

另外,尝试使用 JConsoleJVisualVM之 类的工具(两者均随Sun / Oracle
JDK一起提供),您将能够看到实际堆使用情况的图形表示形式(以及用于限制大小的设置)。

最后,正如@Peter Lawrey非常正确地指出的那样,常驻内存是此处的关键人物-在您的情况下,JVM仅使用16个MiB RSS(根据“
top”)。只要不将JVM的堆压入交换(非RAM),共享/虚拟分配就不会引起任何问题。同样,正如我在一些评论中所述,还有其他可用的JVM-“
Java”非常有能力在低资源或嵌入式平台上运行。



 类似资料:
  • 我试图从管理各种Tomcat实例的应用程序生命周期的第三方工具的正常应用程序日志中筛选出启动(/关闭)事件。基础是(2.12.1),中使用,用于简单的追加器(下面的示例进行了大量简化,包括硬编码值): 相应的记录器如下所示: 当我启动实例时,将创建两个日志文件。但是,只有应用程序日志文件(application appender)包含条目,其中包括我感兴趣的要过滤掉的条目: 有什么想法,如何调试,

  • 我在配置Spring MessageSource以忽略我的系统区域设置时遇到问题。当我使用null locale参数调用getMessage时,我希望我的MessageSource选择默认属性文件messages.properties.相反,它选择messages_en.properties.当我将此属性文件的名称更改为messages_fr.properties然后选择默认属性文件。我的系统区域

  • 我已经为这个问题挣扎了几天了,希望有人能帮上忙。 当我的应用程序尝试构建Hibernate3 SessionFactory时,我遇到以下错误: 下面是我的/WEB-INF/jboss网站。xml: Hibernate在我的单元测试中运行良好,只有当我将其部署到测试服务器时才会发生这种情况。 从我发现的情况来看,这似乎是因为jboss已经有了dom4j的副本。 不,我无法从我的项目中删除dom4j,

  • 问题内容: 给定这两个命令 A: B: 我有两个问题: 由于命令A保留了更多的参数存储空间,因此A的运行速度会比B快吗? 如何-Xmx和-Xms影响正在运行的进程,我的程序的输出? 问题答案: 该参数定义堆可以为JVM达到的最大内存大小。您必须非常了解您的程序,并查看其在负载下的性能,并相应地设置此参数。如果程序的堆内存达到最大堆大小,则较低的值可能会导致OutOfMemoryExceptions

  • 我试图自定义Grails应用程序的日志配置,但appender(及其布局模式)似乎被忽略了。 在配置中。非常棒: Log4J实际上考虑了logger部分(例如,如果我对hibernate的debug和trace行进行注释,那么hibernate语句的记录将按预期停止)。 但我一直在尝试appenders部分的不同版本,似乎都没有考虑,实际上应用于控制台的格式只包括消息本身(例如,如果我编写 在代码

  • JNA还加载正确的库。 这里有人知道为什么不起作用吗?是因为我使用的是带有清单的jar应用程序文件吗? 有人有类似的问题吗?