Java Clip(声音/音频)使用 close() 关闭后内存泄漏

2024-04-03

以下代码创建一个新的音频剪辑,播放它,休眠 3 秒,然后在播放完毕后关闭它。尽管调用了 close(),但每次运行 while 循环时,我都会看到 jvm 的内存使用量随着声音剪辑的大小而增加。

我正在参与一个用java编码的游戏,并且正在处理声音。我无法在每次播放声音时增加我正在使用的内存。

我缺少什么?

import java.io.File;
import javax.sound.sampled.*;

public class ClipLeak{

public static void main(String[] args) throws Exception{
    while(true){
        File soundFile = new File("./sound.wav");
        AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile);

        DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat());
        Clip clip = (Clip) AudioSystem.getLine(info);
        clip.open(sound);
                    sound.close();

        clip.addLineListener(new LineListener(){
            public void update(LineEvent event){
                if(event.getType() == LineEvent.Type.STOP){
                    event.getLine().close();
                }
            }
        });

        clip.start();
        Thread.sleep(2000);
    }
}
}

Try this
    import java.io.File;
    import javax.sound.sampled.*;

    public class ClipLeak{

    public static void main(String[] args) throws Exception{
        while(true){
            File soundFile = new File("./sound.wav");
            AudioInputStream sound = AudioSystem.getAudioInputStream(soundFile);

            DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat());
            Clip clip = (Clip) AudioSystem.getLine(info);
            clip.open(sound);


            clip.addLineListener(new LineListener(){
                public void update(LineEvent event){
                    if(event.getType() == LineEvent.Type.STOP){
                        event.getLine().close();
                    }
                }
            });

            clip.start();
            Thread.sleep(2000);
            if (clip.isOpen()) {
             clip.close();
             sound.close();
            }
        }
    }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Clip(声音/音频)使用 close() 关闭后内存泄漏 的相关文章

随机推荐

  • 保存附件时排除图像 png 和 gif 的 VBA 代码

    我正在使用宏来回复附件 但它总是获取嵌入在邮件中的所有图像并将它们作为附件 我试图在将附件下载到临时文件夹时插入一个片段以排除所有 png 和 gif 格式 原始代码 工作 但也下载嵌入图像 Sub ReplyWithAttachments
  • 哈斯克尔“点黑客”

    In the 数独解决方案的 Wiki 页面 http www haskell org haskellwiki Sudoku Chaining style Solver 一种解决方案声称使用 Dot Hack 链接的 Github 页面不再
  • Windows 8 上的 Firefox 远程调试“意外错误”

    我需要在 Firefox 中调试 Android 的 Web 应用程序 我尝试将设备连接到桌面版 Firefox 但总是收到错误 意外错误 我已经执行了所有步骤https developer mozilla org en US docs T
  • 解析没有完整路径的json

    我想解析 json 而不输入它的路径 I have 如何从未转义的 Url 中获取字符串 我怎样才能在没有路径的情况下做到这一点 所以我有那些 和 我该如何使用它 我的代码是 string itemname Hat with no name
  • 如何在 PHP 中用字符串回显警报——单引号和双引号的一些混淆

    我对如何在屏幕上表示输出 echo 语句中的字符串来调试 php 感到完全困惑 首先 这对我来说实际上很完美 echo 这使用双引号作为 echo 语句的一部分 可以这么说 在命令的外部 并在警报语句上使用单引号 它有效 那么如何在警报语句
  • 没有jquery的outerWidth

    可以使用dom获取元素outerWidth吗 Ej var width document getElementById myDiv outerWidth 不 但是您可以获得 offsetWidth 这可能就是您想要的 From http w
  • linux c - 获取服务器主机名?

    有谁知道有一个函数可以获取linux服务器的主机名吗 我真的不想包含任何标头或编译其他库 希望有一个默认内置的函数 我是 c 新手 like 获取主机名 http linux die net man 2 gethostname 这是运行您的
  • 一个恶意链接仍然反映在网站上

    我的网站是一个静态html网站 没有cms 没有wordpress https www reternetics com https www reternetics com 我运行谷歌广告已经有一段时间了 但现在他们拒绝了我的广告 他们说 该
  • 如何使用 Swift 获取 iOS APP 存档日期 [重复]

    这个问题在这里已经有答案了 我的应用程序有一个要求 我需要使用 swift 显示 ipa 文件创建日期 谁能告诉我该怎么做 提前致谢 您可以使用 Bundle 属性获取应用程序的 url可执行文件URL https developer ap
  • 在mvc c#环境中将doc转换为pdf

    您好 我有一个在特定用户 app pool 用户 下运行的 C MVC 应用程序 我需要将 doc 或 docx 文件转换为 pdf 我认为一个不错的选择是使用 libreoffice 来启动一个启动此进程的进程 为了让自己的生活更轻松 如
  • mat-select 和 mat-chip 可以一起使用吗?

    我想知道是否可以 混合 mat select and mat chip list 在里面chip list 我想显示从中选择的选项mat select 如果是的话我该怎么办 对的 这是可能的 你需要使用
  • 使用 php 将数组分成块并按块在新行中显示结果

    所以正如标题所说 我有一个数组 array 0 gt a 1 gt b 2 gt c 3 gt d 4 gt e 5 gt f 我想做的是循环遍历并分块结果并像这样打印它们 ab cd ef OR abc def 到目前为止我得到了这个 我
  • 如何动态启用禁用的复选框?

    请看这里 http jsfiddle net nShQs http jsfiddle net nShQs 按禁用按钮 然后按启用按钮 该复选框未启用 HTML
  • 将 blittable 结构复制到非托管内存位置的最快方法 (IntPtr)

    我有一个类似于以下的功能 MethodImpl MethodImplOptions AggressiveInlining public void SetVariable
  • Facebook 好友对话框无法在移动设备上运行

    序幕 我遇到了与之前提出的问题中描述的相同的问题 FB 在移动设备上添加好友对话框不起作用 https stackoverflow com questions 17230231 fb add friend dialog on mobile
  • 无法在 R 中对 data.table 使用 dput

    我有以下 data table 无法使用 dput 命令的输出来重新创建它 gt ddt Unit Anything index new 1 A 3 4 1 1 2 A 6 9 2 1 3 A1 1 1 1 2 4 A1 2 2 2 2 5
  • 此版本的 TensorFlow Probability 需要 TensorFlow 版本 >= 2.3

    我尝试使用 TensorFlow Probability 运行模型 但是当我运行它时 我收到以下错误 ImportError This version of TensorFlow Probability requires TensorFlo
  • 获取当前订阅 ID

    使用Powershell Azure模块 有没有办法获取活动订阅ID 我可以使用设置订阅Set AzContext but Get AzContext返回没有特定名称的订阅名称ID column Get AzSubscription返回订阅
  • 如何在React ChartJS中获取填充圆图?

    我想介绍一个填充圆图 气泡图的变体 仅包含半径作为其尺寸 React Chartjs乃至Chartjs仅支持气泡图 不支持圆形图 这是我想要添加的预期图表的示例 我可以使用这样的东西吗react chartjs 例如 需要执行如下操作来定期
  • Java Clip(声音/音频)使用 close() 关闭后内存泄漏

    以下代码创建一个新的音频剪辑 播放它 休眠 3 秒 然后在播放完毕后关闭它 尽管调用了 close 但每次运行 while 循环时 我都会看到 jvm 的内存使用量随着声音剪辑的大小而增加 我正在参与一个用java编码的游戏 并且正在处理声