2010-07-19 101 views
4

我們用java在webstart在客戶端的的Java Swing基於aplication。最近我們在點擊jnlp鏈接時遇到了一個奇怪的「無法啓動java虛擬機」錯誤。的Java Webstart的最大堆大小導致JVM無法啓動

我們很快就找到了它,因爲在JNLP文件最大堆大小設置被設置爲1024M,而大部分客戶PC的只有1 GB的物理內存。將max-heap-size設置回512m解決了問題。 目前,在JNLP文件中的相關行看起來像

<j2se version="1.5+" initial-heap-size="100m" max-heap-size="512m"/> 

我看着JNLP規範,卻找不到相關的「Java虛擬機」問題什麼。理論上,最大堆大小不應該像初始堆大小一樣重要。但我們的經驗暗示恰恰相反。

客戶端環境:

的Windows XP SP2(32位)時,Internet Explorer 8.06,內存1G 注最大堆大小設置爲1024米可與2G內存的機器上導致同樣的問題。

基本上,我期待在這裏是爲什麼這種情況正在發生一些參考/規格/經驗,如果有任何GET-一輪針對此問題除了增加物理內存的大小。

另一件事是,如果我們把最大堆大小的指定,將實際的物理內存的大小作爲最大堆大小,或系統默認的將被使用?

感謝, JasonW

回答

3

很可能這個問題是由一個足夠大的內存區域不能被分配到你的JVM的事實引起的。出於實現的原因,Java對象堆必須分配在連續的虛擬地址中。

我注意到,與2 GB RAM一個Win XP的盒子這打破在大約1.5 GB(此關當然這取決於每個工序都是PC上運行的不同而不同,所以因人而異)。

結帳了一些解釋以下職位:

Java maximum memory on Windows XP

Why is the maximum size of the Java heap fixed?

+0

非常有用的鏈接。謝謝。它還是監督我,沒有什麼(至少我無法找到任何東西)有關的JNLP最大堆大小的參數要求。 – 2010-08-24 00:31:44

1

我發現,無論是初始堆大小和最大堆大小並未受到Mac版本尊重的javaws。我結束了的東西代替它們是這樣的:

 <j2se version="1.6+" java-vm-args="-Xmx1024m -Xms256m -Xss8m" /> 

終於拿到了它在Mac上工作具有較大的堆大小

+1

對於使用Java 8的Windows不起作用 – jan 2015-04-22 08:17:08