【发布时间】: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)