2015-06-20 152 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在环境变量配置不正确的系统上不起作用。