javaプログラムの最適化スレッド
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG自分たちで最適化しようぜ的スレッドです。
テクニックを疲労してくれ
参考資料
http://www.google.com/search?hl=ja&safe=off&q=java+%8D%C5%93K%89%BB%81@%83o%83C%83g%83R%81%5B%83h&lr=
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNGほとんど速度は変わらないって聞いたけど・・・
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG違いは出るのか?
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNGjavacの-Oオプションは単なるダミーだ。騙されちゃダメだぞ。
0011デフォルトの名無しさん
NGNGfor (int i = 999; i >= 0; i--) のほうが速いとか
そういう話でいいですか。
0012デフォルトの名無しさん
NGNGのほうがよくない?
0013デフォルトの名無しさん
NGNGpublic void hoge()
{
for(int i = 0; i < 1000; i++);
// 0 0:iconst_0
// 1 1:istore_1
// 2 2:goto 8
// 3 5:iinc 1 1
// 4 8:iload_1
// 5 9:sipush 1000
// 6 12:icmplt 5
for(int j = 999; j >= 0; j--);
// 7 15:sipush 999
// 8 18:istore_2
// 9 19:goto 25
// 10 22:iinc 2 -1
// 11 25:iload_2
// 12 26:ifge 22
for(int k = 999; k != 0; k--);
// 13 29:sipush 999
// 14 32:istore_3
// 15 33:goto 39
// 16 36:iinc 3 -1
// 17 39:iload_3
// 18 40:ifne 36
// 19 43:return
}
ていうか、空ループの削除すらしないとは恐るべしjavac!!
0014デフォルトの名無しさん
NGNG<■V
/ >
0015デフォルトの名無しさん
NGNGttp://www.asahi-net.or.jp/~dp8t-asm/java/tips/SpeedOptimizationByCodingIndex.html
0016デフォルトの名無しさん
NGNGどうせJITかHOTSPOTがやるんじゃないの?<最適化
0017デフォルトの名無しさん
NGNG下手に最適化しないでコンパイルするようになっている
って話だけど、本音としてはただ手抜きしているだけじゃない?
空のループ消したり、重複分の計算を共通式で置き換えたり
するくらいだったら、どのプラットフォームにも
マイナスにならないと思うのだが・・・。
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNGBorlandあたりがもう少しマシなjavaコンパイラ作ってくれないかな?
0021デフォルトの名無しさん
NGNGJITでやってるなら、それでいいじゃん。
やってるかどうか知らんけど。
0022デフォルトの名無しさん
NGNG実行時に毎回最適化するなんて無駄だろ?
それにすでにバイトコードに変換されたものより
ソースファイルの段階でコンパイルしたほうが
最適化しやすいんじゃない?
002322
NGNG> 最適化しやすいんじゃない?
ソースファイルの段階で最適化したほうが
最適化しやすいんじゃないか?
の間違いです
0024デフォルトの名無しさん
NGNGVJ++で最適化コンパイルした結果
public void hoge(){
//maxstack 2
//maxlocal 2
iconst_0
istore_1
Label1:
iinc 1 1
iload_1
sipush 1000
if_icmplt Label1
sipush 999
istore_1
Label2:
iinc 1 -1
iload_1
ifge Label2
sipush 999
istore_1
Label3:
iinc 1 -1
iload_1
ifne Label3
return
}
>>21
JITで実行される可能性の方が少ないと思われる。
0025デフォルトの名無しさん
NGNGなんだ。結局javacのコードとたいして
変わらないんじゃん。
このスレ、
「なんでjavaは最適化に消極的なのか?」
に変えようぜ
0026デフォルトの名無しさん
NGNGCPUの速度向上がその最適化の結果を軽く吹き飛ばしてしまうから。
0027デフォルトの名無しさん
NGNG最適化せずに、より多くの情報を残しておく方が、
JITが最適化しやすいらしい。
#まあ所詮そんのは幻想なんだけど
#まともにインライン展開すらしやしないし
いつかできると言われている、
理想JITコンパイラに期待しましょ。
その時のために最適化はしないでおきましょ。
0028デフォルトの名無しさん
NGNGそんな甘ったるい思考してるから
いつまでたってもJavaは使えないんだよ。
VC++の鬼のような最適化の、爪の垢でも煎じて飲め。
0029デフォルトの名無しさん
NGNG使えるかどうかと、実行速度の関係は、もはや強い相関があるとは言えない気がする。
0030デフォルトの名無しさん
NGNGそのセリフ一昨年聞いた。変わってねーな。
0031デフォルトの名無しさん
NGNG誰か試した人いる?
0032デフォルトの名無しさん
NGNGバイトコード短くしたほうが明らかに速度上がるんだよな。
感覚的には、バイトコードのサイズに正比例って感じ。
0033デフォルトの名無しさん
NGNGひょっとしなくても律儀に空ループ回ってると思われ。
Sunご自慢の偉大なるHotSpot様は一体何をやっているのか?
public class Hoge {
public static void main(String[] args) {
for (long i = 0; i < 1000000000000000L; i++);
}
}
0034どうなの?
NGNG0035shige
NGNG顔を真っ赤にして耐えている姿を想像するだけで俺の気分は爽快になる。
Ruby万歳。俺にこんな快楽を与えてくれたRubyに幸いあれ。
0036デフォルトの名無しさん
NGNGこのスレでいいのか……?
0037デフォルトの名無しさん
NGNG「javaプログラムの最適化スレッド」
いいと思いますYO!
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG無視して続行しましょう。
顔を真っ赤にして侮辱に耐えてくれ。萌え〜
0041shige
NGNGみんなでPerlユーザをこの板から追い出そう!
0042shige
NGNG「Perl使いは死ね!」「Perl使いは死ね!」「Perl使いは死ね!」「Perl使いは死ね!」
「Perl使いは死ね!」「Perl使いは死ね!」「Perl使いは死ね!」「Perl使いは死ね!」
0043オプションの名無し
NGNGi < 1000000000Lで計測しました。(-Oなし)
type | 1st | 2nd
gcc2.5.2 | 10.46s | 10.42s
java1.3 | 21.98s | 18.64s
インタプリタの単純ルプーで、これほどまでに速いのでは?
というか...当たり前でしょ?、テスツと呼ぶに値しない。ふっ..
> 13 >ていうか、空ループの削除
はぁ? 最適化というよりもプログラムの意図を捻じ曲げる、創世記以前の産物.
RealTimeでビジーウエイツやターイミングコンーテキスタに使われるかもしれない代物ですぜ。
0044デフォルトの名無しさん
NGNGこの人おもしろすぎ
氷魚ウォッチスレにリンク張ってもいいですか?
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNG詳細キボーン
0048デフォルトの名無しさん
NGNGアルゴリズムを工夫しろ、ということです。
0049デフォルトの名無しさん
NGNG工夫してもどうにもならないのが、糞Javaということです。
0050sunより
NGNGなぜなら、空ループでタイミングをとることも想定しているからです。
手間をかければ空ループの時間も厳密に計測できます。
これらが有効に生かされるのは、組み込み分野です。
0051デフォルトの名無しさん
NGNGまぁ、そういう事だろうね。
スレッドでスリープかけるより資源が少しで済む。
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNGそりゃー、「Java固有」って言ってる時点で小手先だろ。
アルゴリズムの見直しによる最適化はJava固有の話じゃないからな
0054デフォルトの名無しさん
NGNGSunがそう言ってるんですか?
ソースをクレー、粘土をclay〜
っていうかそれ、javacやJ2SEで空ループなくさない理由に
ならんと思いますけど。空ループウェイトなんて
Write Once, Run Anywhereの建前にも反するし。
0055デフォルトの名無しさん
NGNG空ループの消去って最適化としてはあまり意味がないと思う。
逆にわざわざ空ループ作るからには、
何かしら意図があってやってるんだろうしね。
そんなのはどうでも良いから、
インライン展開、
サブルーチン展開、
コンスタントプールの最適化、
ローカル変数の最小割り当て、
即値の最適化、
privateメソッドのリネーム
とかもっと積極的にやってくれよ。ゴラァ
0056デフォルトの名無しさん
NGNGclassからの逆変換って結構多用されるから
最適化をしないのはそのあたりも一枚噛んでるかと。
0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNGリバースエンジニアリングのために最適化しない
という認識でおおかた問題ありません。
0059デフォルトの名無しさん
NGNGjavacを全く使わないか、あるいは一旦javacにはかせてから、
生のバイトコードを手で最適化してる人っているのかな?
( RetroGuardとかのツールの開発者じゃなくて、アプリケーションの開発者で)
0060デフォルトの名無しさん
NGNGサブルーチン展開ってなに?
0061デフォルトの名無しさん
NGNG小さいサブルーチンをそこに展開しちゃえば
関数呼び出し時のオーバーヘッドがなくなるから
ちょっぴり速くなる。
いうほど高速化は望めない上、これをやられると
あとでデバッグが面倒でたまらないのでやめてほしい。
0062デフォルトの名無しさん
NGNG006362
NGNG開発中はインライン展開しなけりゃいいだけの話。
006560
NGNG006761
NGNGただの言葉遊び。
Cとかだとインライン展開しろっていう指示子があったね。
0068デフォルトの名無しさん
NGNG実情を知らないのが割り込んですまないが
javaの最適化って、いまのとこ、そんなにしょぼいもんなの?
同じコードがC++とjavaで速度が違うとかだと、
言語の特性もあるからあまり比較に成らんと思うけどね。
どっちかというと、作るコストの方を最適化したい感じだ。
0069デフォルトの名無しさん
NGNGサブルーチン展開というのは、
javaのバイトコードのjsr命令を使ってメソッド内にルーチンを展開すること。
インライン展開より速度は劣るが、
メソッドコールよりも高速で、
メソッドを定義したりインライン展開するよりもコードサイズを縮小できる。
例えば、以下のメソッドをサブルーチン展開した場合、
void foo()
{
:
:
boo();
:
:
boo();
}
void foo()
{
:
:
jsr boo
:
:
jsr boo
boo:
:
:
ret
}
0070デフォルトの名無しさん
NGNGつまり小手先テクニックね。
脱力した。
0071デフォルトの名無しさん
NGNG小手先じゃないだろ?
メソッド定義やコールに、かなりの無駄が伴うJavaにとっては、
かなり重要なテクだぞ。
0072デフォルトの名無しさん
NGNGgcc3.0に自前の最適化コード入れれば
javaのコードはそのままでいい感じに速くなるかもよ?
0073デフォルトの名無しさん
NGNGそうしたらgccなりVisualC++なりを使える。
0074デフォルトの名無しさん
NGNGでもその時点でjavaの理想がいくつか失われるよね
ただのオブジェクト指向型言語になっちゃうよ。
0075デフォルトの名無しさん
NGNGjavaが誕生した当初、javacはcへのコンバータでした
0076デフォルトの名無しさん
NGNGほう。
ちょいと、javaしらべてみるかなー。
0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNG0079オプションの名無し
NGNG2.デフォルトコンストラクタではなくサイズを指定できるコンストラクタを設計段階で決定せよ。(ArrayList然り)
3.newをできるだけ使わないパターンを適用すべし。(Flyweight,Proxy然り)
4.予測ではなく実測を重視すること(20-80%というか3%-97%ぐらいか)
5.何でもかんでもsynchronizedを使うな、volatileを使ってくれ、たのむ。
6.SQLのIsolationに何でもかんでもRepatable Readを使うな、ロック制御は発行した
SQLとJavaで指定したレベルがともに影響することを理解してくれ。お願いだから。
7.finalメソッドでなくてもいいが、せめてprivateメソッドに解体してよ。
8.System.gc()なんて呼ばないでくれ、JavaはC++じゃ無いんだ。
夏休みおわり記念age(6が分かってない奴のせいで苦労した)
0080デフォルトの名無しさん
NGNG詳しくきぼ〜ん。
とりあえず無節操synchronizedが深刻にパフォーマンスに影響するのは
分かってるッス。
0081デフォルトの名無しさん
NGNGみんなこんなに速度きにしてコーティングしてんの!?
0082shige
NGNG0083デフォルトの名無しさん
NGNG0084iアプリ開発者
NGNG0085デフォルトの名無しさん
NGNG0086iアプリ開発者
NGNG0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNGしばらくは無くならないだろうね<iアプリ
ケータイばっかいじってる馬鹿な若者どもがいなくならない限り。
0089デフォルトの名無しさん
NGNG009079じゃないけど
NGNGあくまでおいらの経験談だけど、
プリミティブ変数のマルチスレッド同期を取りたいだけなら、
volatile変数にすることで十分達成される。
synchronizedだと、性能以前に、予期しないデッドロックが
発生するリスクがある。
コードを作った本人はともかく、メンテで放り込まれた場合
synchronizedが入り乱れたマルチスレッドプログラムは恐怖の的。
変更すると、見当もつかないところで急に動かなくなったりする。
0091デフォルトの名無しさん
NGNGStringやらStringBufferを使うより
自分でcharなり(アルファベットのみなら)byteなりを使った方が
高速なプログラムになるのでしょうか?
0092デフォルトの名無しさん
NGNG0093名無しさん@
NGNGけっきょくもうかるのはドコモだよね?
0094shige
NGNGヾ/::::::::::::::::::::::::::ヾヽ
i:::::::::(((((((((⌒);) 湿度の高いジメジメとした熱帯夜の中
|:::::::/ .iノ >>1はおもむろにパンツの中から
|::::/ ヘ / | 己のイチモツを取り出した!
,⊥|:|----(=・)-(=・) まだ、実戦経験がないためか?
l !:; ∪ ⌒´⊃` | 亀頭の色彩は綺麗なサーモンピンクだ
ゝ_┃ ´___/
|┗━⊃<二二y' ハードディスクの7割を占めようかという
| \_二/ ロリ画像の数々……
/ト、 /7:`ヽ、_ さぁ今日のオカズは何だ?
/::::::::| ~''x‐''''~~ /::::::::::::::`ー 洋物か?あるいは国産か!?
/::::::::::::::::| ,,イ;;;;>、 /:::::::::::::::::::::::::: 少女のまだ未発達の肉体が
::::::::::::::::::::::| /:::::| /::::::::::::::::::::::::::::::: 鬼畜な>>1のリビドーを刺激する!
人差し指と親指で作ったイチモツへのエンゲージリングを
己のペースで……まるで太鼓を叩く猿のオモチャのような激しい上下の反復運動
ああーーーーと!ここでアクシデント発生だぁーーーーー!!!
なんとティッシュボックスの中が空っぽだ!!
>>1の亀頭から無色透明な先走り汁が溢れ出す!
んっ!?……まさか、まさかっ!そのまま出すのかーー!?
この男は、たった一瞬の快楽のためにそこまでのリスクを犯すのか?
ああっと>>1はどうやら覚悟を決めたようだ、その表情は心なしか落ち着いている
自分の運命を覚悟した神風特攻隊のような清々しい漢(おとこ)の顔だ
あ゛あ゛あ゛あ゛あ゛あ゛あ゛あ゛あ゛あ゛あ゛っと!!!!!!
滑らかな放物線を描き母と父から受け継いだ濃厚なザーメンが
>>1のキーボードとディスプレイを直撃するーーーーーーーーーーーっ!!!
0095デフォルトの名無しさん
NGNGStringやらStringBufferを使うより
自分でcharなり(アルファベットのみなら)byteなりを使った方が
高速なプログラムになるのでしょうか?
0096デフォルトの名無しさん
NGNG0097dqwdqwdqwdqwdqwdqwdq
NGNG0098デフォルトの名無しさん
NGNGどうやって?
0099デフォルトの名無しさん
NGNG文字列処理。
つーか、そういってんじゃん・・・
0100デフォルトの名無しさん
NGNG??
どうやってパフォーマンスをはかるんだ?
って意味じゃね〜の?
0101デフォルトの名無しさん
NGNG0102デフォルトの名無しさん
NGNG1万回くらいのループの時間計測、かなぁ。
何を1万回? いやーいろいろ
0103デフォルトの名無しさん
NGNGStringとStringBufferのソース見て、それより高速化できるか
考えてみれば?
0104デフォルトの名無しさん
NGNGつーか、そのうちチャットのマイサーバを携帯端末で動かすような
そんなiアプリの時代がやってくると思われ
それがJavaなのかC#なのかはしらんが
0105近所のバカ
NGNGあははは あははは あははは あははは
ちょっと質問なんだが
あははは あははは あははは あははは
あははは あははは あははは あははは
Win NTにJDKをインストールする際、コントロールパネルを起動し
(環境)を選択して(ユーザー環境変数)と(システム環境変数)で
(PATH)を探します。パスを追加する場所がわからないときは、
ユーザー変数の(PATH)の最後に追加します。
C:\jdk1.2\bin
ってのがあるんだけど、どうやんの?
あははは あははは あははは あははは
あははは あははは あははは あははは
0106デフォルトの名無しさん
NGNGその説明でわからなければ、こちらへどうぞ
http://natto.2ch.net/pcqa/index2.html
0107近所のバカ
NGNGあははは あははは あははは あははは
私はJAVAの初心者だけであって
コンピューターの初心者ではないよ。
あははは あははは あははは あははは
あははは あははは あははは あははは
0108デフォルトの名無しさん
NGNGJDKは普通何種類も用意しておくものだから
環境はbatファイルで用意しておくものだから
0109デフォルトの名無しさん
NGNG「コンピューターの初心者ではない」とノタマエる時代になったんだね
コンソール概念は過去の遺物ですか?
思えば遠くにきたモンダ
0110近所のバカ
NGNGあははは あははは あははは あははは
で、どうやんの?
あははは あははは あははは あははは
あははは あははは あははは あははは
0111デフォルトの名無しさん
NGNGパスを追加するバッチファイルを用意すればいいよ。
0112デフォルトの名無しさん
NGNG0113shige
NGNG0114近所のバカ
NGNGあははは あははは あははは あははは
バカだから聞いてんのに、答えになってないよ。
あははは あははは あははは あははは
あははは あははは あははは あははは
0115デフォルトの名無しさん
NGNGJava実行できるようになったか?
0116デフォルトの名無しさん
NGNGhttp://natto.2ch.net/pcqa/index2.html
0117デフォルトの名無しさん
NGNG>考えてみれば?
ソースなんてあるんですか?
JDKをダウンロードすると付いてくるのですか?
0118デフォルトの名無しさん
NGNGそうです。src.jarを解凍してみそ。
0119デフォルトの名無しさん
NGNG世の中物知りが多いなー
0120デフォルトの名無しさん
NGNGそれは失礼な発言だってことに気がついているか?
0121デフォルトの名無しさん
NGNG0122デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています