[英]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可以使用的內存總量。
這是什么意思?
您已經在類名稱之后指定了Xmx
和Xms
參數。 因此, 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.