簡體   English   中英

Java無法為對象堆保留足夠的空間-多個Java進程

[英]Java could not reserve enough space for object heap - multiple java processes

我們的一位客戶在嘗試啟動第二個Java進程時遇到了此錯誤消息。

Error occurred during initialization of VM
Could not reserve enough space for object heap

這很奇怪,因為在可用的8 Gig內存中,僅使用了2或3。

如果第一個進程未運行,則啟動第二個進程的命令將正常運行。 這是用於啟動第二個過程的命令:

java -jar Xmx512m -jar xxxJar.jar

第一個過程從Windows服務開始。 我不知道顯示服務啟動命令的好方法,很有可能執行我們的啟動批處理文件。 通過查看批處理文件,看起來正在使用以下Java選項:

-Xms1g -Xmx1g -Xss256K -Xverify:none -XX:+TieredCompilation -XX:+UseBiasedLocking
-XX:+UseParNewGC -XX:InitialCodeCacheSize=8m -XX:ReservedCodeCacheSize=32m 
-Dorg.terracotta.quartz.skipUpdateCheck=true

服務啟動也顯示以下警告:

Java HotSpot(TM) 64-Bit Server VM warning: Using the ParNew young collector with the Serial old collector is deprecated and will likely be removed in a future release 

這也很奇怪,因為我沒有看到其他系統的警告。

該平台是Windows Embedded 2010的JDK 1.8.0_111。

問題是:1.為什么在有5.5個可用內存的情況下Java無法啟動,並且只要求.5 Gigs max?

  1. 為什么在該計算機上發出UseParNewGC警告,而不在其他計算機上發出?

代替

java -jar Xmx512m -jar xxxJar.jar

嘗試

java -Xmx512m -jar xxxJar.jar

默認值是保留主內存的1/4,我懷疑在有機會報告您已兩次使用-jar之前,它沒有這樣做。

知道為什么僅在運行其他服務時就無法獲得空間,但是仍然有5..5 Gig的可用核心嗎?

使用Windows 32位JVM時,根據操作系統的不同,最大堆大小限制為1.2G至1.5G。 默認值可能已經太大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM