コードが境界外の配列に対処しないことをコンパイル時に証明できる、十分強力なタイプのシステムをサポートする言語がいくつかあります。私の質問は、JVMにそのような言語をコンパイルする場合、パフォーマンスのためにそれを利用して、すべての配列アクセスで発生する配列境界チェックを削除する方法があるのでしょうか?不要な境界チェックとキャストを避けるためにJVMをハックします
1)私は最近のJDKがいくつかの配列境界チェックをサポートしていることを知っていますが、コンパイル時に特定の呼び出しが安全であることがわかっているので、もっと安全に削除できます。
2)これは性能にはあまり影響しませんが、特に科学計算のようなアレイ/計算量の多いアプリケーションでは、最も効果的です。
キャスティングに関する同じ質問です。私は何かが特定のタイプであることを知っていますが、Javaは制限されたタイプのシステムではありません。 JVMに "私を信用する"ように指示して何らかの小切手をスキップする方法がありますか?
JVMが一般的に配布されているため、おそらくこれを行う方法がないことがわかりました.JVMをこの機能で変更するのは妥当でしょうか?これは何かされていますか?
これは、JVMに強力に型付けされた言語をコンパイルする際の不満の1つですが、それでもJavaの制限によって妨げられています。
私は、境界チェックに時間がかかることに同意します。どのくらいの頻度でキャストしていますか? (そして/またはいくつかの詳細を与える)それはほとんどのコードで重要なパフォーマンスヒットであるとは思われない。 – user949300
確かにわかりませんが、一般的な原則です。コードについて特定のことが証明されているため、JVMの制限がこの場合不要になってしまうからです。 – mentics
あなたはsun.misc.Unsafeを見たことがありますか? http://stackoverflow.com/questions/5574241/interesting-uses-of-sun-misc-unsafeアプリケーションに正しい設定が与えられていれば、境界チェックなしで直接メモリにアクセスできます。それが直接的にも間接的にもいくつかの型キャスティング機能を提供していれば、私は驚くことはありません。 – Philip