据我所知,使用垃圾收集语言意味着会有时间间隔,整个应用程序停止在其中。但我很好奇这一站的范围。
例如,Java有PortAudio
个绑定,有两种操作模式,它们在控制方向上有所不同。在一种模式中,您调用PortAudio来放置它必须播放的一些数据,在其他模式下,PortAudio会调用您(回调函数)来用数据填充缓冲区。我想知道为什么PortAudio的Java绑定不允许第二种模式(使用回调)。解释是,可以阅读here: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。)如果我想用GC语言实现一个音频播放器(从来没有丢失样本)而只使用1个进程,我应该注意什么?它有可能吗?
之前我正在参与开发一种Java语言的VoIP软件,并且存在严重的丢失问题,这些问题与GC有关。但是我认为做音乐播放器应该更容易,因为延迟不是问题,我可以使用巨大的缓冲区来处理音频数据。
我只对免费和开源解决方案感兴趣。因此,例如,使用“替代”但非自由的Java运行时实现不是我使用的选项。但无论如何要知道它很有意思。