2015-06-20 151 views
4

我的客戶端有一個名爲CacheDownloader的類,它爲我的主jar,客戶端下載了一個解壓縮更新。我遇到了一個問題,因爲它無法解壓新客戶端並在使用時將其替換,所以我必須創建一個新的jar(名爲ClientUpdater),它將解壓新客戶端以替換舊客戶端,然後打開新客戶端。Java內存不足

ClientUpdater打開客戶端備份沒有問題。但是,CacheDownloader無法打開ClientUpdater,它會發生內存不足錯誤。

CacheDownloader仍下載所有新文件並解壓縮文件,所有ClientUpdater都解壓縮包含相當小的客戶端的小型zip文件。

這裏是CacheDownloader負載如何ClientUpdater:

Runtime.getRuntime().exec("java -jar " + getCacheDir() + "/ClientUpdater.jar"); 
System.exit(0); 

以下是完整的錯誤信息 - http://gyazo.com/8105ffd4c35f5f6d4a68a770fedf8f92

希望這是足夠的情況下,沒有它是冗長的信息。我現在的問題是,我該如何解決這個問題?錯誤表示我可以增加保留的代碼緩存,這是否有負面影響?我怎麼這樣做,谷歌並沒有真正顯示它是如何解釋它做了什麼。

我對Java很新,所以要記住。

+0

對於[示例](http://stackoverflow.com/a/6310284/230513),你的[profiler](http://stackoverflow.com/q/2064427/230513)告訴你什麼? – trashgod

+0

我沒有這種新的。該錯誤確實說最大/使用/利用,但如果這就是你需要? – VirtualJunky

+0

您可能已經有jvisualvm,它通常包含在JDK中。 – trashgod

回答

2

你可以嘗試下面的步驟來解決這個問題。

  1. 增加最小/最大堆大小處理的ReservedCodeCacheSize例如

    Runtime.getRuntime().exec("java -Xms2048m -Xmx2048m -jar " + getCacheDir() + "/ClientUpdater.jar");

  2. 增加尺寸-XX:ReservedCodeCacheSize =256米詳情here

您應該使用像visualvm一個分析器,可以找到更多的細節有關運行時環境。例如內存,CPU,線程,堆大小等。

0

我知道這是RSPS。我建議您使用反射來加載客戶端,使用Runtime.exec在環境變量配置不正確的系統上不起作用。