为什么我的jvm在调用clip.open之后崩溃

时间:2018-12-27 10:38:24

标签: java audio raspberry-pi javasound

在树莓派零上,我调用一个Java子程序playsound(String pSoundDateiName),它在前两次工作。我第三次(从主程序)调用它,JVM崩溃了。 我发现调用play.open是有问题的,此命令将导致崩溃。 有谁知道为什么? 还是其他解决方案?

public static void playsound(String pSoundDateiName){
try {
   File in = new File(pSoundDateiName);
   AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(in);
   Clip play = AudioSystem.getClip();
   play.open(audioInputStream);
   play.start();
   Thread.sleep(2000);
   play.drain();
   play.close();
   audioInputStream.close();            
}  catch (UnsupportedAudioFileException | IOException | LineUnavailableException | InterruptedException ex) {
    ex.printStackTrace();
   };
};

Actual result after the third call:
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0xb651e5fc, pid=12133, tid=2911761520
#
# JRE version: Java(TM) SE Runtime Environment (8.0_65-b17) (build 1.8.0_65-b17)
# Java VM: Java HotSpot(TM) Client VM (25.65-b01 mixed mode linux-arm )
# Problematic frame:
# V  [libjvm.so+0x1c05fc]

我尝试了更新的Java版本,但结果相同:(但是现在我们有了一个“ DefNewGeneration :: copy_to_survivor_space(oopDesc *)”)

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0xb64d2b98, pid=1001, tid=0xb3ed7470
#
# JRE version: Java(TM) SE Runtime Environment (8.0_191-b12) (build 1.8.0_191-b12)
# Java VM: Java HotSpot(TM) Client VM (25.191-b12 mixed mode linux-arm )
# Problematic frame:
# V  [libjvm.so+0x1c4b98]   DefNewGeneration::copy_to_survivor_space(oopDesc*)+0xc

我找到了文件“ hs_err_pid1001.log”,并试图理解其内容,但是它很难阅读

该怎么办? 如果jvm中有错误,我该怎么办?

我现在做了一个全新的简约的树莓拉伸(精简版)安装,使用了最新版本的Java(192),问题是相同的。 但是我认识到我可以对子程序进行更多的调用,直到它崩溃为止。另外,当我更改系统的内存使用率(内存拆分)时,子程序调用的数量(直到崩溃)也会更改。 我认为程序中没有“清理”内存使用情况。 我可以强迫Java进行这种“清理”吗? 还有其他想法吗?

我现在有解决此问题的方法。我使用java调用“ java -Xms128M -Xmx256M ...”启动主程序,这给了我更多可用内存,并且超过100个子程序调用直到崩溃。另外,我的树莓每晚都会自动启动。 我知道这不是完美的解决方案,但可以解决。 谢谢大家。

1 个答案:

答案 0 :(得分:0)

audioInputStream.close()一起使用后,请尝试关闭audioInputStream对象。