爆速です(ただし C++ の 2-3 倍程度キリッ)(意訳)っていうのは見る気がするけど・・・。
2013-07-01 01:06:37@phoenixstarhiro Javaなんかは状況次第でC++より速いのではないでしょうか?実行時にしか分からない情報を使ってJITで最適化したり、GCありでメモリ確保も速くできたりするし(それともJavaは最近聞く言語に入らないって?)
2013-07-01 01:10:06. @egtra うわ、すみません。通知がなく気づきませんでした・・・。不勉強で恐縮ですが、現在のJITでネイティブコードより速くなるケースって結構あるものなんでしょうか? GCはメモリの回収に時間がかかるので、平均的にはマイナスだと思うのですが、いかがでしょうか?
2013-07-02 22:52:36JIT は実行時情報を使って最適化できるから静的コード生成より速いコードを吐けることがあるよ、という話はよく聞くしもっともだと思うけど、そういう素晴らしい最適化が出来るケースがどれだけあって、どういうアプリケーションだと有効なのか、というのは不勉強にして全然知らない。誰か教えて。
2013-07-02 22:57:03@nya3jp あ、もちろん。パフォーマンスに視点をおくと、個人的な印象では「JIT は夢語られること多いけど、現状不勉強でよくしらない(まさに nyaさんの直前のツイート)」「GCは平均的にはマイナス」。
2013-07-02 23:06:16@phoenixstarhiro Java の場合は平均 1.数倍 (2倍とか行かない) かつ、割とちょくちょく速くなることがある (極端に仮想関数を排除して超頑張った非人道的 C++ を相手にしなければ) という感じのような。ただしスループットで、リアルタイム性は分が悪いですね
2013-07-02 23:07:31GC って、メモリ管理を自動化することでプログラマの負荷軽減 & SEGV 回避、的な側面では効果があると思うんだけど、Runtime でパフォーマンスあがるのかと言われると現状疑問符だなぁ、という印象。
2013-07-02 23:08:42@nya3jp Java みたいな言語で JIT がよく貢献するのは仮想関数によるオーバーヘッドの除去なので (もちろん他にもあるけど) 仮想関数を使わずに設計すると泣きを見る複雑さでかつその辺に hot path があるようなアプリケーションだと割と勝てる気がする [要出典]
2013-07-02 23:11:43私はパフォーマンス重視なプログラムを書く機会があまりないゆとりプログラマなので GC が多少オーバーヘッドあっても許せます。だが Java お前はダメだ。
2013-07-02 23:12:10@dmikurube うーん、仮想関数呼び出しがボトルネックになりそうなコードって限られてきそうですね…… 全部仮想関数な Java だと死活問題なのは確かですが。
2013-07-02 23:13:12@dmikurube おっ。何かちょっと見るのに都合のいい参照先とかあったりしませんか? ちなみに c++ 側は仮想関数書かないはもとより __builtin_expect とか __builtin_prefetch とかくらいまでは普通だと思ってるのですが・・・。
2013-07-02 23:14:54@phoenixstarhiro そのレベルと比較したらまあ勝てるわけがないですw JIT関係を総覧するのにいい一次文献ってあんま無いんですよねー。私も欲しい。身近なとこでWebKitがhotなとこで仮想関数除去を超頑張ってますが、あれが人類が直に扱える複雑さの上限だと思う...
2013-07-02 23:20:07仮想関数呼び出しにコスト掛かるって、modern CPUならあり得ないだろ……と書きかけて、そういえばあれは組み込み向けCPUとかでも動くんだったと思いだした
2013-07-02 23:25:17@phoenixstarhiro まあ職人が書いたらC++の方が速くなるのはまだ当然で、でも複雑さが上がるに連れてそれができる職人はどんどん少なくなってる、というくらいじゃないかと。アセンブラ手打ちでコンパイラに勝つのが不可能なのと同じ状況になるには、もっとブレイクスルー要りそう
2013-07-02 23:25:32と言っても自分が JIT についてはもともと専門じゃない上に最近の状況をしっかりとは追いかけてないので、もっと最近の事情に詳しい人に登場願いたい
2013-07-02 23:28:15