【问题标题】:Java Out of Heap SpaceJava 堆空间不足
【发布时间】:2014-05-29 08:54:14
【问题描述】:

在我的 java 程序中,我使用文本到语音来说出数字,在说出大约 150 个数字后,它会耗尽堆空间(从 JAR 打开时)我也尝试增加堆空间,但问题仍然存在持续存在。

我都尝试了什么:

使用批处理脚本:

java -Xmx1024m -jar Super_Brain Academy.jar
pause

[Super_Brain Academy.jar 是文件名] 但这仍然不能解决我的问题,因为它只增加了主 JAR 文件而不是 TTS(freeTTS) 的堆空间。

我也尝试制作一个胖 JAR,然后这样做,但问题是当我制作胖 JAR 时,TTS 停止工作,我无法听到任何声音。我尝试通过this 方法制作胖JAR。我还尝试使用 stackoverflow 上给出的其他方法制作胖 JAR,但它们令人困惑,我无法理解它们。我是一个新手(到目前为止,您可能已经知道了)并使用 Netbeans 8。

代码

据我所知,我认为错误一定来自这个代码块,它位于一个单独的 java 文件中:

   private static final String VOICENAME = "kevin16";
   
   VoiceManager voiceManager = VoiceManager.getInstance();

//这里有一些代码............

private void RandomjBActionPerformed(java.awt.event.ActionEvent evt) {                                         
//When the button is clicked it generates one random number according to the conditions and speaks it up
    Voice voice;
    voice = voiceManager.getVoice(VOICENAME);
    voice.allocate();

    //Some variable declarations and initializations along with set visible commmands were here(removed as irrevelant for the problem)

    for (g = 0; g==0;) {
        ran = (int) (Math.random() * (c)); // Random Number Creation Starts
      if(ran>=c/10){

           g = 1;
           //Some logic statements here

      }//IF ENDS  
      if(g!=0){
          if(num<0){
              num = num * (-1); // MAKING NUM ALWAYS +ve
          }
      }//if(g!-0) ends here  
    }//for loop ends
    d = d+ran;
    t4.setText("" + ran);
    voice.speak(t4.getText());
    listenanum.setText("" + d);
    listenanum.setVisible(false);
}                                       

这个 randomjB 被一次又一次地点击,这就是问题发生的时候。 (我已经从上面的代码中删除了很多行,所以它可能对你来说实际上没有意义......但我只留下了我认为重要的那些行)

randomjB的完整代码请查看this

【问题讨论】:

  • 我是你没有正确释放资源。显示您的代码会有所帮助
  • 在调整 JVM 选项(Xmx、Xms 等)之前先尝试修复代码中的内存泄漏
  • @Dibya 哪个代码? build.xml?
  • 我建议你在 visualVM 中对应用程序进行内存分析,看看它为什么使用这么多内存。你可能有错误。
  • @EmanuelSaringan 你确定有内存泄漏,因为默认情况下只有 4 或 5 MB 我认为这对 tts 来说是不够的......我也没有任何调试器来做到这一点(我是使用netbeans)

标签: java jar


【解决方案1】:

根据你们的意见,我认为这是内存管理的问题。

我发现this 链接非常有用。您可以在任何适用的地方按照相同的方式制作程序块内存。

同样优化后如果出现同样的错误信息,可以通过this链接了解如何增加堆大小。

【讨论】:

  • 我相信您提供的viralpatel.net/blogs/… 链接中没有任何用处,因为这就是我正在做的事情(通过批处理脚本,我正在提供 cmd 参数)并且仍然存在问题,并且就内存管理而言...我一定会调查的
  • @DakshShah:你必须有一个java代码才能完成一些任务,对吧?当您收到Java out of heap 错误时!我的建议是优化你的java代码。增加堆大小并尝试一下。如果 java 代码没有正确释放资源,那么你不能从批处理文件中做很多事情。
  • 哦,现在我明白了,很抱歉我误解了...我也将在问题中添加该代码。
猜你喜欢
  • 2021-11-20
  • 1970-01-01
  • 2013-01-03
  • 2013-07-21
  • 2012-06-15
  • 2020-01-23
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多