簡體   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