Java内存溢出

3

在我的Java程序中,我正在使用文本转语音来朗读数字,当它朗读了大约150个数字后,就会用尽堆空间(从JAR打开时)。我已经尝试增加堆空间,但问题仍然存在。

我尝试过的所有方法:

使用批处理脚本:

java -Xmx1024m -jar Super_Brain Academy.jar
pause
Super_Brain Academy.jar是文件名,但这仍然不能解决我的问题,因为它只增加了主JAR文件的堆空间,而没有增加TTS(freeTTS)的堆空间。
我尝试过制作fat Jar并执行此操作,但问题是当我制作fat JAR时,TTS停止工作,我无法听到任何声音。我尝试使用此方法制作fat JAR。我还尝试从stackoverflow提供的其他方法中制作fat 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 代码,请访问此链接


4
也许您没有正确释放资源。展示您的代码将有助于我们理解。 - NewUser
在调整JVM选项(Xmx,Xms等)之前,请先尝试修复代码中的内存泄漏问题。 - user2422457
@Dibya 是哪段代码?build.xml吗? - Daksh Shah
我建议你使用visualVM对应用程序进行内存分析,以查明为什么它会使用这么多的内存。可能存在一个错误。 - Peter Lawrey
@Crossfire 更新了代码,请看一下。这段代码在主代码中,我把它删除了,因为我有点确定没有这样愚蠢的错误,但无论如何,我已经添加了整个代码链接,以防有人需要。 - Daksh Shah
显示剩余7条评论
1个回答

0
根据您的评论,我认为这是与内存管理有关的问题。
我发现this链接非常有帮助。您可以在适用的情况下遵循相同的步骤来阻止程序占用内存。
如果优化后仍然收到相同的错误消息,您可以通过this链接了解如何增加堆大小。

我认为你提供的http://viralpatel.net/blogs/jvm-java-increase-heap-size-setting-heap-size-jvm-heap/链接中没有任何有用的信息,因为我正在执行相同的操作(通过批处理脚本,我正在提供cmd参数),但仍然存在问题。至于内存管理方面...我一定会研究一下。 - Daksh Shah
@DakshShah:你一定有一个Java代码来完成某些任务,对吧?因为你遇到了“Java out of heap”错误!我的建议是优化你的Java代码。增加堆大小并尝试一下。如果Java代码没有正确释放资源,那么你就不能从批处理文件中做太多事情。 - NewUser
哦,现在我明白了,很抱歉我误解了……我会把那段代码也加到问题里。 - Daksh Shah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接