アカウント名:
パスワード:
現在のサーバサイド Java の場合、最適化は確率と統計の世界に入ります。
JIT コンパイル自体が実行時間の一部になってしまうので、JIT 範囲を絞り込むためにプロファイリングを行い、HotSpot と判断した部分のみコンパイルします。
なので、同じコードでも、プログラム中での実行頻度によって実行速度が変わる -それも実行の途中から- のです。
こうなるとネイティブ環境での常識が通用しません。マイクロベンチマークを回すと極度に最適化されて良すぎる結果が出るとか。
ルールで最適化の正否を判断できないので、システムの組みように困るというか、悪いと思える場所でも影響がどのくらい有るのか分かりにくいというか。
参照: 日本HP - HP-UX Developer Edge - メモリ・リーク解析とHotSpot JVM [hp.com] (日本HPのサイトですしメモリリークを解説する記事の一部ですが、これが一番端的な解説をしていると思います)
また、javacが吐くお馬鹿なコードというのは、例えば「影響の全くない命令を幾つも並べる」というものでありこれはJITだろうが何だろうが省くに越したことはないでしょう。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
※ただしPHPを除く -- あるAdmin
言語と目的によるだろ (スコア:3, すばらしい洞察)
もしかしてJavaとかPerlとかPHPとかでのコーディングははプログラミングじゃねぇ!とかいいたいんじゃ・・・とか思って元記事を見たらそうではないみたいですが。
# 学生時代に実習でマイコンのプログラミングをしたとき、「サブルーチンをアセンブラで書いてもいいですか」と教官に聞いたら「そんな無駄なことする必要はない」とか言われたことをふと思い出した
Re:言語と目的によるだろ (スコア:0)
Re:言語と目的によるだろ (スコア:2, 参考になる)
ほんとかどうかはしらんけど。
Re:言語と目的によるだろ (スコア:2, 興味深い)
無いのですよ。下手にバイトコードレベルでいじって最適化(と思い込んでいる行為)を
やるとかえって遅くなる危険性が高いですよ。
Re:言語と目的によるだろ (スコア:4, 参考になる)
現在のサーバサイド Java の場合、最適化は確率と統計の世界に入ります。
JIT コンパイル自体が実行時間の一部になってしまうので、JIT 範囲を絞り込むためにプロファイリングを行い、HotSpot と判断した部分のみコンパイルします。
なので、同じコードでも、プログラム中での実行頻度によって実行速度が変わる -それも実行の途中から- のです。
こうなるとネイティブ環境での常識が通用しません。マイクロベンチマークを回すと極度に最適化されて良すぎる結果が出るとか。
ルールで最適化の正否を判断できないので、システムの組みように困るというか、悪いと思える場所でも影響がどのくらい有るのか分かりにくいというか。
参照: 日本HP - HP-UX Developer Edge - メモリ・リーク解析とHotSpot JVM [hp.com] (日本HPのサイトですしメモリリークを解説する記事の一部ですが、これが一番端的な解説をしていると思います)
Re:言語と目的によるだろ (スコア:0)
また、javacが吐くお馬鹿なコードというのは、例えば「影響の全くない命令を幾つも並べる」というものでありこれはJITだろうが何だろうが省くに越したことはないでしょう。
--
IDとりたいんだけど、とろうと思ったIDが10回くらい連続で「すでに取られているのと似ている」で弾かれたのでいい加減諦めてAC。
とれるIDサーチ機能を付けて欲しいです!!
Re:言語と目的によるだろ (スコア:0)
Re:言語と目的によるだろ (スコア:0)
Re:言語と目的によるだろ (スコア:1)
Re:言語と目的によるだろ (スコア:0)
多分、それは「javac が吐くコード1命令ごとに、JITが1命令以上のコードを吐く」という大前提があるのではありませんか?もっと言うと、「Just In Timeな最適化」とはどういうものか、がよくわかっていないのでは…。
Re:言語と目的によるだろ (スコア:0)
>やるとかえって遅くなる危険性が高いですよ
それはあらゆる言語のコンパイラ全般に言えることだよね。
ローレベルの原始的な話で威張るぐらいならコンパイラのオプションを全部理解すべき。
Re:言語と目的によるだろ (スコア:0)
> それはあらゆる言語のコンパイラ全般に言えることだよね。
文脈を読んでくださいな。#1222709がJavaコンパイラ(=javac)が吐くコードがお馬鹿だから
自前でバイトコードいじっていると述べたので、そもそもJavaにおいては最適化は
javacの仕事ではなく、JVMのJITコンパイラの仕事だよ(+バイトコードレベル
での最適化はJITコンパイラの最適化を阻害する危険性が高いよ)、ということを言った
までであって、これは一般論としての、コンパイラの最適化に任せるべきか、
手動で最適化すべきか、という問題とは別物です。