私の知る限り、ガベージ コレクションで言語を使用するということは、アプリケーション全体が停止する時間間隔があることを意味します。しかし、私はこの停止の範囲に興味があります。
たとえば、PortAudio
Java のバインディングがあり、制御方向が異なる 2 つの操作モードがあります。あるモードでは、PortAudio を呼び出して再生する必要のあるデータを配置し、別のモードでは、PortAudio がユーザー (コールバック関数) を呼び出してそのバッファーにデータを入力します。PortAudio の Java バインディングが 2 番目のモード (コールバックを使用) を許可しないのはなぜでしょうか。ここで読むことができるように、説明は次のとおりです。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 ランタイムの「代替」であるが無料ではない実装を使用することは、私が使用するオプションではありません。しかし、とにかく知っていることは興味深いです。