0

据我所知,使用带有垃圾收集的语言意味着会有时间间隔,在该时间间隔内整个应用程序都会停止。但我很好奇这个站点的范围。

比如PortAudioJava有绑定,有2种操作模式,控制方向不同。在一种模式下,您调用 PortAudio 来放置一些它必须播放的数据,而在另一种模式下,PortAudio 调用您(回调函数)以用数据填充其缓冲区。我想知道,为什么 PortAudio 的 Java 绑定不允许第二种模式(使用回调)。解释是,可以在这里阅读:This Java binding does not support audio callbacks because an audio callback should never block. Calling into a Java virtual machine might block for garbage collection or synchronization. So only the blocking read/write mode is supported.这意味着在其他情况下 GC 应该不是问题?但为什么?我不明白这一点。

以及在其他带有 GC 的编程语言中情况会有什么不同?(特别有趣的是 C# 和 D。)如果我想在只使用 1 个进程的情况下使用 GC 语言实现音频播放器(永远不会丢失样本),我应该注意什么?这有可能吗?

之前我正在参与开发一种用 Java 编写的 VoIP 软件,并且出现了与 GC 及时相关的严重问题。但是我认为做音乐播放器应该更容易,因为延迟在这里不是问题,我可以使用巨大的缓冲区来存储音频数据。

更新:

我只对免费和开源的解决方案感兴趣。因此,例如,使用 Java 运行时的“替代”但非自由实现不是我使用的选项。但无论如何,知道这很有趣。

4

0 回答 0