パフォーマンスを最適化することと安全性を完全にオフにすることには大きな違いがあるため
GCの数を減らすことにより、フレームワークの応答性が向上し、(おそらく)より速く実行できるようになります。現在、ガベージコレクタの最適化は、ガベージコレクションを行わないという意味ではありません。それは彼らがあまり頻繁にそれをしないことを意味し、彼らがそれをするとき、それは本当に速く走ります。これらの種類の最適化には以下が含まれます。
- 小さなスローアウェイオブジェクトを使用して、サバイバースペースに移動する(つまり、少なくとも1つのガベージコレクションを生き残った)オブジェクトの数を最小限に抑える。サバイバー空間に移動したオブジェクトは収集が難しく、ここでのガベージコレクションはJVM全体の凍結を意味する場合があります。
- 最初からあまりにも多くのオブジェクトを割り当てないでください。若い世代のオブジェクトは割り当てや収集が非常に安価であるため、注意しないとこれは逆効果になります。
- 新しいオブジェクトが古いオブジェクトを指していることを確認し(逆ではない)、若いオブジェクトを簡単に収集できるようにします。
パフォーマンスを調整するときは、頻繁に実行されないコードを無視しながら、通常は非常に具体的な「ホットスポット」を調整します。Javaでそれを行う場合、ガベージコレクターにこれらの暗いコーナーを処理させることができます(大きな違いは生じないため)が、タイトループで実行される領域に対して非常に慎重に最適化します。したがって、最適化する場所としない場所を選択できるため、重要な場所に努力を集中できます。
ガベージコレクションを完全にオフにすると、選択できなくなります。これまで、すべてのオブジェクトを手動で廃棄する必要があります。そのメソッドは1日に1回しか呼び出されませんか?Javaでは、パフォーマンスへの影響は無視できるため、そのままにすることができます(完全なGCを毎月発生させてもかまいません)。C ++では、まだリソースがリークしているため、そのあいまいなメソッドにも注意する必要があります。したがって、アプリケーションのすべての部分でリソース管理の料金を支払う必要がありますが、Javaでは集中できます。
しかし、それはさらに悪化します。
バグがある場合は、満月の月曜日にのみアクセスされるアプリケーションの暗いコーナーで言ってみましょう。Javaには強力な安全性保証があります。「未定義の動作」はほとんどありません。間違ったものを使用すると、例外がスローされ、プログラムが停止し、データの破損は発生しません。だから、気づかないうちに何も悪いことは起こらないと確信しています。
しかし、Dのようなものでは、不正なポインタアクセスやバッファオーバーフローが発生する可能性があり、メモリを破損する可能性がありますが、プログラムは認識せず(安全をオフにしたことを覚えていますか?)データ、およびいくつかの非常に厄介なことを実行してデータを破損しますが、あなたは知らない、そしてより多くの破損が発生するにつれて、データはますます間違って、それから突然壊れて、それは人生に不可欠なアプリケーションにありました、そしてその指を、いくつかのエラーは、ロケットの計算に起こった、そしてそれは仕事、そしてロケット爆発、と誰かのダイスをしないように、そしてあなたの会社は、すべての新聞のフロントページにあり、あなたの上司のポイントあなたあなたが「と言っていますパフォーマンスを最適化するためにDを使用することを提案したエンジニアが、なぜ安全性を考えなかったのですか?「そして、それはあなたのせいです。あなたはパフォーマンスへのあなたの愚かな試みでそれらの人々を殺しました。
わかりました、ほとんどの場合、それはそれよりも劇的ではありません。しかし、ビジネスクリティカルなアプリケーションやGPSアプリだけでなく、たとえば政府のヘルスケアWebサイトでも、バグがあるとかなりマイナスの結果をもたらす可能性があります。それらを完全に防ぐか、発生したときにフェイルファーストする言語を使用することは、通常非常に良い考えです。
安全をオフにするのにはコストがかかります。ネイティブになることは必ずしも意味をなさない。時には、少しでも安全な言語を最適化する方がはるかに簡単で安全な場合があります。多くの場合の正確性と安全性は、GCを完全に排除することによって廃棄される数ナノ秒に勝ります。そのような状況ではDisruptor を使用できるため、LMAX-Exchangeが適切な呼び出しを行ったと思います。
しかし、特にDはどうですか?暗いコーナーが必要な場合はGCがあり、SafeDサブセット(編集前には知りませんでした)は未定義の動作を削除します(使用することを忘れない場合!)。
まあその場合、それは単純な成熟度の問題です。Javaエコシステムは、適切に作成されたツールと成熟したライブラリでいっぱいです(開発に適しています)。Dよりも多くの開発者がJavaを知っています(メンテナンスの方が良い)。金融アプリケーションのように重要な何かのために、あまり人気のない新しい言語を選ぶのは良い考えではなかったでしょう。あまり知られていない言語では、問題がある場合、あなたを助けることができるものはほとんどありません。あなたが見つけるライブラリは、より少ない人々にさらされているため、より多くのバグを持つ傾向があります。
ですから、私の最後のポイントはまだ保持しています。あなたが悲惨な結果を伴う問題を避けたいなら、安全な選択を固守してください。Dの人生のこの時点で、顧客は狂ったリスクを取る準備ができている小さな新興企業です。問題に数百万の費用がかかる場合は、イノベーションの鐘型曲線にとどまることをお勧めします。