1 :
デフォルトの名無しさん:
-O
疲れきってます。
エクセルソフトのJETってどうよ?
native
-O オプションは付けても付けなくても
ほとんど速度は変わらないって聞いたけど・・・
javacよりもjavaコマンドのオプションのほうが重要マジレス
JITならわかるけどjavaインタープリタで
違いは出るのか?
ひとまずRetroGuardはデフォでしょうね
>>2 javacの-Oオプションは単なるダミーだ。騙されちゃダメだぞ。
for (int i = 0; i < 1000; i++) よりも
for (int i = 999; i >= 0; i--) のほうが速いとか
そういう話でいいですか。
for (int i = 999; i != 0; i--)
のほうがよくない?
要は0と比較するかどうかだから、同じと思われ。こんなんでました。
public 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!!
14 :
デフォルトの名無しさん:2001/07/03(火) 00:12
● 旦 <age!!
<■V
/ >
15 :
デフォルトの名無しさん:2001/07/03(火) 00:17
>>13 どうせJITかHOTSPOTがやるんじゃないの?<最適化
17 :
デフォルトの名無しさん:2001/07/03(火) 00:20
javaはマルチプラットフォームだから
下手に最適化しないでコンパイルするようになっている
って話だけど、本音としてはただ手抜きしているだけじゃない?
空のループ消したり、重複分の計算を共通式で置き換えたり
するくらいだったら、どのプラットフォームにも
マイナスにならないと思うのだが・・・。
最適化機能がよわいから簡単に逆コンパイルされちゃうんだよね
空ループまで再現されるもんな。(藁
javacアホ決定
Borlandあたりがもう少しマシなjavaコンパイラ作ってくれないかな?
なんでバイトコードコンパイルで最適化せにゃならんのよ。
JITでやってるなら、それでいいじゃん。
やってるかどうか知らんけど。
22 :
デフォルトの名無しさん:2001/07/03(火) 00:33
なんでJITに任せる必要があるんだよ!!
実行時に毎回最適化するなんて無駄だろ?
それにすでにバイトコードに変換されたものより
ソースファイルの段階でコンパイルしたほうが
最適化しやすいんじゃない?
23 :
22:2001/07/03(火) 00:34
> ソースファイルの段階でコンパイルしたほうが
> 最適化しやすいんじゃない?
ソースファイルの段階で最適化したほうが
最適化しやすいんじゃないか?
の間違いです
24 :
デフォルトの名無しさん:2001/07/03(火) 00:35
>>13 VJ++で最適化コンパイルした結果
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で実行される可能性の方が少ないと思われる。
25 :
デフォルトの名無しさん:2001/07/03(火) 00:39
>>24 なんだ。結局javacのコードとたいして
変わらないんじゃん。
このスレ、
「なんでjavaは最適化に消極的なのか?」
に変えようぜ
26 :
デフォルトの名無しさん:2001/07/03(火) 01:08
みみっちい最適化してるうちに、
CPUの速度向上がその最適化の結果を軽く吹き飛ばしてしまうから。
27 :
デフォルトの名無しさん:2001/07/03(火) 01:09
>>25 最適化せずに、より多くの情報を残しておく方が、
JITが最適化しやすいらしい。
#まあ所詮そんのは幻想なんだけど
#まともにインライン展開すらしやしないし
いつかできると言われている、
理想JITコンパイラに期待しましょ。
その時のために最適化はしないでおきましょ。
28 :
デフォルトの名無しさん:2001/07/03(火) 01:13
>>26 そんな甘ったるい思考してるから
いつまでたってもJavaは使えないんだよ。
VC++の鬼のような最適化の、爪の垢でも煎じて飲め。
>>28 使えるかどうかと、実行速度の関係は、もはや強い相関があるとは言えない気がする。
>>26 そのセリフ一昨年聞いた。変わってねーな。
31 :
デフォルトの名無しさん:2001/07/03(火) 01:31
gcjってどうなの?
誰か試した人いる?
32 :
デフォルトの名無しさん:2001/07/03(火) 02:26
JITで最適化とかゆーとるわりに、
バイトコード短くしたほうが明らかに速度上がるんだよな。
感覚的には、バイトコードのサイズに正比例って感じ。
適当に下のコードJava 1.3.1で実行したら、延々と終了せず。
ひょっとしなくても律儀に空ループ回ってると思われ。
Sunご自慢の偉大なるHotSpot様は一体何をやっているのか?
public class Hoge {
public static void main(String[] args) {
for (long i = 0; i < 1000000000000000L; i++);
}
}
こうやってPerlユーザが馬鹿にされて、コケにされて、侮辱されて、(当然のことだ)
顔を真っ赤にして耐えている姿を想像するだけで俺の気分は爽快になる。
Ruby万歳。俺にこんな快楽を与えてくれたRubyに幸いあれ。
>>36 「javaプログラムの最適化スレッド」
いいと思いますYO!
38 :
デフォルトの名無しさん:2001/07/03(火) 21:30
でもたぶん、このスレだと陵辱されるのはキミだYO!
こんなスレ削除依頼出そうぜ!
40 :
デフォルトの名無しさん:2001/07/03(火) 21:35
35==39
無視して続行しましょう。
顔を真っ赤にして侮辱に耐えてくれ。萌え〜
みんなでPerlユーザを苛めよう!
みんなでPerlユーザをこの板から追い出そう!
みんなで叫ぼう!
「Perl使いは死ね!」「Perl使いは死ね!」「Perl使いは死ね!」「Perl使いは死ね!」
「Perl使いは死ね!」「Perl使いは死ね!」「Perl使いは死ね!」「Perl使いは死ね!」
>> 33
i < 1000000000Lで計測しました。(-Oなし)
type | 1st | 2nd
gcc2.5.2 | 10.46s | 10.42s
java1.3 | 21.98s | 18.64s
インタプリタの単純ルプーで、これほどまでに速いのでは?
というか...当たり前でしょ?、テスツと呼ぶに値しない。ふっ..
> 13 >ていうか、空ループの削除
はぁ? 最適化というよりもプログラムの意図を捻じ曲げる、創世記以前の産物.
RealTimeでビジーウエイツやターイミングコンーテキスタに使われるかもしれない代物ですぜ。
44 :
デフォルトの名無しさん:2001/07/04(水) 04:37
>>43 この人おもしろすぎ
氷魚ウォッチスレにリンク張ってもいいですか?
いや、あまりおもしろくはないと思うぞ。
46 :
デフォルトの名無しさん:2001/07/09(月) 00:17
じゃあそろそろ誰か結論をまとめてくれ。
47 :
デフォルトの名無しさん:2001/07/09(月) 00:44
48 :
デフォルトの名無しさん:2001/07/09(月) 00:48
>>47 アルゴリズムを工夫しろ、ということです。
49 :
デフォルトの名無しさん:2001/07/09(月) 00:57
>>48 工夫してもどうにもならないのが、糞Javaということです。
50 :
sunより:2001/07/09(月) 01:00
空ループの削除はしません。
なぜなら、空ループでタイミングをとることも想定しているからです。
手間をかければ空ループの時間も厳密に計測できます。
これらが有効に生かされるのは、組み込み分野です。
51 :
デフォルトの名無しさん:2001/07/09(月) 01:05
>>50 まぁ、そういう事だろうね。
スレッドでスリープかけるより資源が少しで済む。
java固有の最適化って結局、小手先の事か?>1
53 :
デフォルトの名無しさん:2001/07/09(月) 02:03
>>52 そりゃー、「Java固有」って言ってる時点で小手先だろ。
アルゴリズムの見直しによる最適化はJava固有の話じゃないからな
>>50 Sunがそう言ってるんですか?
ソースをクレー、粘土をclay〜
っていうかそれ、javacやJ2SEで空ループなくさない理由に
ならんと思いますけど。空ループウェイトなんて
Write Once, Run Anywhereの建前にも反するし。
55 :
デフォルトの名無しさん:2001/07/09(月) 04:43
>>54 空ループの消去って最適化としてはあまり意味がないと思う。
逆にわざわざ空ループ作るからには、
何かしら意図があってやってるんだろうしね。
そんなのはどうでも良いから、
インライン展開、
サブルーチン展開、
コンスタントプールの最適化、
ローカル変数の最小割り当て、
即値の最適化、
privateメソッドのリネーム
とかもっと積極的にやってくれよ。ゴラァ
>>55 classからの逆変換って結構多用されるから
最適化をしないのはそのあたりも一枚噛んでるかと。
リバースエンジニアリングする人のために最適化しないわけですか?
58 :
デフォルトの名無しさん:2001/07/10(火) 03:54
>>57 リバースエンジニアリングのために最適化しない
という認識でおおかた問題ありません。
59 :
デフォルトの名無しさん:2001/07/10(火) 13:52
Cでなくアセンブラだけで組むような感じで、
javacを全く使わないか、あるいは一旦javacにはかせてから、
生のバイトコードを手で最適化してる人っているのかな?
( RetroGuardとかのツールの開発者じゃなくて、アプリケーションの開発者で)
60 :
デフォルトの名無しさん:2001/07/10(火) 13:58
61 :
デフォルトの名無しさん:2001/07/10(火) 14:03
>>60 小さいサブルーチンをそこに展開しちゃえば
関数呼び出し時のオーバーヘッドがなくなるから
ちょっぴり速くなる。
いうほど高速化は望めない上、これをやられると
あとでデバッグが面倒でたまらないのでやめてほしい。
インライン展開でデバッグが面倒になったりはしないと思うが……。
63 :
62:2001/07/10(火) 14:15
じゃないな(あー、眠い)。なんつーかほれ、
開発中はインライン展開しなけりゃいいだけの話。
64 :
62:2001/07/10(火) 14:16
>>59 Javaでデモ作ってた人たちはやってたと思う。
バイトコードアセンブラ?はJasminとかあるでよ。
65 :
60:2001/07/10(火) 15:37
インライン展開とは違うのですか?
66 :
60:2001/07/10(火) 15:37
67 :
61:2001/07/10(火) 16:04
>>65 ただの言葉遊び。
Cとかだとインライン展開しろっていう指示子があったね。
指示しなくても、出来そうなら勝手にやってたね。
実情を知らないのが割り込んですまないが
javaの最適化って、いまのとこ、そんなにしょぼいもんなの?
同じコードがC++とjavaで速度が違うとかだと、
言語の特性もあるからあまり比較に成らんと思うけどね。
どっちかというと、作るコストの方を最適化したい感じだ。
69 :
デフォルトの名無しさん:2001/07/10(火) 23:16
>>60 サブルーチン展開というのは、
javaのバイトコードのjsr命令を使ってメソッド内にルーチンを展開すること。
インライン展開より速度は劣るが、
メソッドコールよりも高速で、
メソッドを定義したりインライン展開するよりもコードサイズを縮小できる。
例えば、以下のメソッドをサブルーチン展開した場合、
void foo()
{
:
:
boo();
:
:
boo();
}
void foo()
{
:
:
jsr boo
:
:
jsr boo
boo:
:
:
ret
}
60じゃないけどthx
つまり小手先テクニックね。
脱力した。
71 :
デフォルトの名無しさん:2001/07/10(火) 23:27
>>70 小手先じゃないだろ?
メソッド定義やコールに、かなりの無駄が伴うJavaにとっては、
かなり重要なテクだぞ。
つまり、javaの処理系がショボイのね。
gcc3.0に自前の最適化コード入れれば
javaのコードはそのままでいい感じに速くなるかもよ?
73 :
デフォルトの名無しさん:2001/07/11(水) 00:23
javaソースからCソースに変換できるパーサを作ってほしい。
そうしたらgccなりVisualC++なりを使える。
>>73 でもその時点でjavaの理想がいくつか失われるよね
ただのオブジェクト指向型言語になっちゃうよ。
75 :
デフォルトの名無しさん:2001/07/11(水) 00:37
>>73 javaが誕生した当初、javacはcへのコンバータでした
>>75 ほう。
ちょいと、javaしらべてみるかなー。
GCJってどうなったの?
78 :
デフォルトの名無しさん:2001/07/12(木) 00:42
あげ!
1.String.+ではなくStringBuffer.addを使え。(SQLは元よりHTML,XML然り)
2.デフォルトコンストラクタではなくサイズを指定できるコンストラクタを設計段階で決定せよ。(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が分かってない奴のせいで苦労した)
80 :
デフォルトの名無しさん:2001/08/19(日) 08:27
>5.何でもかんでもsynchronizedを使うな、volatileを使ってくれ、たのむ。
詳しくきぼ〜ん。
とりあえず無節操synchronizedが深刻にパフォーマンスに影響するのは
分かってるッス。
なんじゃ、Javaでプログラムするとき、
みんなこんなに速度きにしてコーティングしてんの!?
Ruby
オタクしかいないからでしょ。
バイトコードのサイズも気にするぞ。
iアプリっていつ滅びるの?
明日。
87 :
デフォルトの名無しさん:2001/08/20(月) 16:13
iアプリ終了記念age
マジレス。
しばらくは無くならないだろうね<iアプリ
ケータイばっかいじってる馬鹿な若者どもがいなくならない限り。
今日もちっちゃい画面見ながらピッピッピ〜
>>80 あくまでおいらの経験談だけど、
プリミティブ変数のマルチスレッド同期を取りたいだけなら、
volatile変数にすることで十分達成される。
synchronizedだと、性能以前に、予期しないデッドロックが
発生するリスクがある。
コードを作った本人はともかく、メンテで放り込まれた場合
synchronizedが入り乱れたマルチスレッドプログラムは恐怖の的。
変更すると、見当もつかないところで急に動かなくなったりする。
91 :
デフォルトの名無しさん:2001/08/20(月) 23:00
javaで文字列操作のプログラムをつくる場合
StringやらStringBufferを使うより
自分でcharなり(アルファベットのみなら)byteなりを使った方が
高速なプログラムになるのでしょうか?
92 :
デフォルトの名無しさん:2001/08/20(月) 23:02
デッドロックを検出するにはどうしたらいいかな?
iアプリってさ、いっくらいいもんつくっても、
けっきょくもうかるのはドコモだよね?
______
ヾ/::::::::::::::::::::::::::ヾヽ
i:::::::::(((((((((⌒);) 湿度の高いジメジメとした熱帯夜の中
|:::::::/ .iノ
>>1はおもむろにパンツの中から
|::::/ ヘ / | 己のイチモツを取り出した!
,⊥|:|----(=・)-(=・) まだ、実戦経験がないためか?
l !:; ∪ ⌒´⊃` | 亀頭の色彩は綺麗なサーモンピンクだ
ゝ_┃ ´___/
|┗━⊃<二二y' ハードディスクの7割を占めようかという
| \_二/ ロリ画像の数々……
/ト、 /7:`ヽ、_ さぁ今日のオカズは何だ?
/::::::::| ~''x‐''''~~ /::::::::::::::`ー 洋物か?あるいは国産か!?
/::::::::::::::::| ,,イ;;;;>、 /:::::::::::::::::::::::::: 少女のまだ未発達の肉体が
::::::::::::::::::::::| /:::::| /::::::::::::::::::::::::::::::: 鬼畜な
>>1のリビドーを刺激する!
人差し指と親指で作ったイチモツへのエンゲージリングを
己のペースで……まるで太鼓を叩く猿のオモチャのような激しい上下の反復運動
ああーーーーと!ここでアクシデント発生だぁーーーーー!!!
なんとティッシュボックスの中が空っぽだ!!
>>1の亀頭から無色透明な先走り汁が溢れ出す!
んっ!?……まさか、まさかっ!そのまま出すのかーー!?
この男は、たった一瞬の快楽のためにそこまでのリスクを犯すのか?
ああっと
>>1はどうやら覚悟を決めたようだ、その表情は心なしか落ち着いている
自分の運命を覚悟した神風特攻隊のような清々しい漢(おとこ)の顔だ
あ゛あ゛あ゛あ゛あ゛あ゛あ゛あ゛あ゛あ゛あ゛っと!!!!!!
滑らかな放物線を描き母と父から受け継いだ濃厚なザーメンが
>>1のキーボードとディスプレイを直撃するーーーーーーーーーーーっ!!!
95 :
デフォルトの名無しさん:2001/08/20(月) 23:25
javaで文字列操作のプログラムをつくる場合
StringやらStringBufferを使うより
自分でcharなり(アルファベットのみなら)byteなりを使った方が
高速なプログラムになるのでしょうか?
それくらい試せよ。
っっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっっk
98 :
デフォルトの名無しさん:2001/08/20(月) 23:34
>それくらい試せよ。
どうやって?
>>98 文字列処理。
つーか、そういってんじゃん・・・
100 :
デフォルトの名無しさん:2001/08/21(火) 00:14
>99
??
どうやってパフォーマンスをはかるんだ?
って意味じゃね〜の?
そんな事気にする奴はJava使うな
102 :
デフォルトの名無しさん:2001/08/21(火) 08:16
>>100 1万回くらいのループの時間計測、かなぁ。
何を1万回? いやーいろいろ
103 :
デフォルトの名無しさん:2001/08/21(火) 10:37
>>95 StringとStringBufferのソース見て、それより高速化できるか
考えてみれば?
104 :
デフォルトの名無しさん:2001/08/21(火) 12:27
>>85 つーか、そのうちチャットのマイサーバを携帯端末で動かすような
そんなiアプリの時代がやってくると思われ
それがJavaなのかC#なのかはしらんが
105 :
近所のバカ:2001/08/21(火) 14:51
あははは あははは あははは あははは
あははは あははは あははは あははは
ちょっと質問なんだが
あははは あははは あははは あははは
あははは あははは あははは あははは
Win NTにJDKをインストールする際、コントロールパネルを起動し
(環境)を選択して(ユーザー環境変数)と(システム環境変数)で
(PATH)を探します。パスを追加する場所がわからないときは、
ユーザー変数の(PATH)の最後に追加します。
C:\jdk1.2\bin
ってのがあるんだけど、どうやんの?
あははは あははは あははは あははは
あははは あははは あははは あははは
107 :
近所のバカ:2001/08/21(火) 15:15
あははは あははは あははは あははは
あははは あははは あははは あははは
私はJAVAの初心者だけであって
コンピューターの初心者ではないよ。
あははは あははは あははは あははは
あははは あははは あははは あははは
108 :
デフォルトの名無しさん:2001/08/21(火) 15:20
>>107 JDKは普通何種類も用意しておくものだから
環境はbatファイルで用意しておくものだから
環境変数やパスの通し方を知らなくても
「コンピューターの初心者ではない」とノタマエる時代になったんだね
コンソール概念は過去の遺物ですか?
思えば遠くにきたモンダ
110 :
近所のバカ:2001/08/21(火) 16:01
あははは あははは あははは あははは
あははは あははは あははは あははは
で、どうやんの?
あははは あははは あははは あははは
あははは あははは あははは あははは
111 :
デフォルトの名無しさん:2001/08/21(火) 16:03
>>110 パスを追加するバッチファイルを用意すればいいよ。
馬鹿はJavaやらないで下さい
馬鹿はJavaでもやっといてください(藁)
114 :
近所のバカ:2001/08/22(水) 13:12
あははは あははは あははは あははは
あははは あははは あははは あははは
バカだから聞いてんのに、答えになってないよ。
あははは あははは あははは あははは
あははは あははは あははは あははは
117 :
デフォルトの名無しさん:2001/08/23(木) 01:33
>StringとStringBufferのソース見て、それより高速化できるか
>考えてみれば?
ソースなんてあるんですか?
JDKをダウンロードすると付いてくるのですか?
118 :
デフォルトの名無しさん:2001/08/23(木) 01:34
>>117 そうです。src.jarを解凍してみそ。
119 :
デフォルトの名無しさん:2001/08/23(木) 01:37
何でそんな事知ってるんですか?
世の中物知りが多いなー
120 :
デフォルトの名無しさん:2001/08/23(木) 01:56
>>119 それは失礼な発言だってことに気がついているか?
121 :
デフォルトの名無しさん:2001/08/23(木) 02:54
なぜ?