Java内存不足

时间:2015-06-20 00:23:35

标签: java memory

我的客户端有一个名为CacheDownloader的类,它为我的主jar,即客户端下载解压缩更新。我有一个问题,因为它无法解压缩新客户端并在使用时替换它,所以我不得不制作一个新的jar(名为ClientUpdater)解压缩新客户端以替换旧客户端,然后打开新客户端

ClientUpdater打开客户端备份没问题。但是,CacheDownloader无法打开ClientUpdater,它会出现内存不足错误。

CacheDownloader仍会下载所有新文件并解压缩文件,所有ClientUpdater都会解压缩包含相当小客户端的小型zip文件。

以下是CacheDownloader加载ClientUpdater的方法:

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

以下是完整的错误消息 - http://gyazo.com/8105ffd4c35f5f6d4a68a770fedf8f92

希望这是足够的背景和信息,而不是冗长。我现在的问题是,我该如何解决这个问题呢?错误说我可以增加保留代码缓存,这是否有负面影响?而且我如何做到这一点,谷歌并没有真正展示如何解释它做了什么。

我对Java很陌生,所以要记住这一点。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下步骤来解决此问题。

  1. 增加流程的最小/最大堆大小

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

  2. 增加ReservedCodeCacheSize的大小,例如-XX:ReservedCodeCacheSize = 256m更多详细信息here

  3. 您应该使用visualvm之类的分析器,并且可以找到有关运行时环境的更多详细信息。例如内存,cpu,线程,堆大小等。

答案 1 :(得分:0)

我知道这是RSPS。我建议您使用反射来加载客户端,因为使用 Runtime.exec 将无法在未正确配置环境变量的系统上运行。