繁体   English   中英

XMX和GC日志数据不匹配

[英]Xmx and gc log data not matching

我使用以下jvm参数运行了一个测试程序(在无限循环中添加带有字符串的列表)

java -XX:+PrintGCDetails -Xloggc:gc.log Test -Xmx=1k -Xms=1k

并得到以下异常

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

在gc日志中,我将以下集合作为最后一个条目

11.242: [Full GC (Allocation Failure) [PSYoungGen: 0K->0K(92160K)] [ParOldGen: 274084K->274072K(371712K)] 274084K->274072K(**463872K**), [Metaspace: 2522K->2522K(1056768K)], 3.0296130 secs] [Times: user=3.28 sys=0.00, real=3.02 secs] 

如果min和max为1k,那么可用的堆内存如何显示为463872K

在Oracle站点中加号

https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

我看到一个字条,

注意: -Xmx不会限制JVM可以使用的内存总量。

这是什么意思?

您已经在类名称之后指定了XmxXms参数。 因此, java可执行命令将它们解释为类的参数,而不是配置JVM的选项。 正确的方法是:

java -Xmx1k -Xms1k -XX:+PrintGCDetails -Xloggc:gc.log Test

另请注意,正确的格式是-Xmx1k ,而不是-Xmx=1k

但是请不要,JVM不会以如此低的Xms开头。

@Nikem正确回答了,我不想回答问题的这一部分。 但是,我想在您的第二个问题中添加一些内容-

注意:-Xmx不会限制JVM可以使用的内存总量。 这意味着什么?

-Xmx仅限制可用于应用程序堆使用的内存。

但是,JVM将需要PermGen的内存空间和堆栈大小,而-Xmx参数未考虑这些大小。

暂无
暂无

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

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