5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Javaのコードを小さくするには?

1 :しょうげきくん:2000/07/30(日) 08:03
http://mentai.2ch.net/test/read.cgi?bbs=venture&key=964762155

のスレッドにて、Javaのバイトコードを小さくするにはどうしたらよいか
という話しになっておりました。僕が「クラス名やメソッド名を小さくす
ればクラスファイルは小さくなる」と書いたら、完全に否定されました。
僕が間違っているののでしょうか?

勝ち負けじゃなくて、真実を知りたいのです。

2 :名無しさん@1周年:2000/07/30(日) 08:18
class Test{
static void main(String ar[]){
System.out.println("TestTest");
}
}
class TestTest{
static void main(String ar[]){
System.out.println("TestTest");
}
}
ls -l
-rw-r--r-- 1 user student 410 Jul 30 08:17 Test.class
-rw-r--r-- 1 user student 87 Jul 30 08:17 Test.java
-rw-r--r-- 1 user student 407 Jul 30 08:17 TestTest.class
-rw-r--r-- 1 user student 91 Jul 30 08:17 TestTest.java
solaris@` jdk1.3

3 :名無しさん@1周年:2000/07/30(日) 09:26
t.java
--------------
class Test{
static void main(String ar[]){
System.out.println("TestTest");
}
}
class TestTest{
static void main(String ar[]){
System.out.println("TestTest");
}
}
--------------

Microsoft(R) Windows 98
(C)Copyright Microsoft Corp 1981-1998.

C:\WINDOWS\デスクトップ>javac t.java

C:\WINDOWS\デスクトップ>dir t*

ドライブ C: のボリュームラベルは S359891D001
ボリュームシリアル番号は 3917-110A
ディレクトリは C:\WINDOWS\デスクトップ

TTSSH LNK 384 99-07-14 0:11 ttssh.lnk
THPE PL 4@`959 00-07-25 12:09 thpe.pl
TEST~1 CLA 410 00-07-30 9:28 Test.class
T~1 JAV 182 00-07-30 9:28 t.java
TESTTE~2 CLA 410 00-07-30 9:28 TestTest.class
5 個 6@`345 バイトのファイルがあります.
0 ディレクトリ 268.87 メガバイトの空きがあります.

C:\WINDOWS\デスクトップ>

4 :しょうげきくん:2000/07/30(日) 09:57
反論の例を示します。

LongName.java
----------------------
class LongName {
public LongName() {
}
public void longNameMethod0(){
}
public void longNameMethod1(){
}
public void longNameMethod2(){
}
public void longNameMethod3(){
}
public void longNameMethod4(){
}
public void longNameMethod5(){
}
}
---------------------------------------
S.java
---------------------------------------
class S {
public S() {
}
public void a() {
}
public void b() {
}
public void c() {
}
public void d() {
}
public void e() {
}
}

5 :しょうげきくん:2000/07/30(日) 09:58
ありゃ、失敗。
---------------------------------------
S.java
---------------------------------------

class S {
public S() {
}
public void a() {
}
public void b() {
}
public void c() {
}
public void d() {
}
public void e() {
}
public void f() {
}

}


6 :しょうげきくん:2000/07/30(日) 10:00
サイズは、
00/07/30 09:58a 536 LongName.class
00/07/30 09:58a 438 S.class
です。



7 :しょうげきくん:2000/07/30(日) 10:04
さらに、僕が1のスレッドで紹介したツールを使うと、約700KBのJarが
250KB程度になりました(無圧縮)。これは、「バイトコードが小さく
なった」とは言わないのでしょうか?

何か僕は理解していないのでしょうか?

8 :名無しさん@1周年:2000/07/30(日) 10:25
http://java-house.etl.go.jp/ml/archive/j-h-b/019167.html#body

少しは参考になるかも。


9 :しょうげきくん:2000/07/30(日) 10:28
確かに「クラスファイル」は小さくなったけれど、「バイトコード」
は小さくなっていないのではないかもしれません。ちょっとわかりま
せん。勉強します。

10 :名無しさん@1周年:2000/07/30(日) 10:33
Java の言語仕様が個々のバイトコンパイラの実装の仕方までは規定していないと思うので
コンパイラによって違う、としか言えないと思いますがどうでしょうか。

11 :しょうげきくん:2000/07/30(日) 10:44
生成されるバイトコードは多少異なるかもしれませんが、クラスファイルの仕様は
決まっています。クラスファイルにパブリックなメソッド名やフィールド名が含ま
れている以上、それらの名前を機械的に小さくすれば、クラスファイルのサイズや
jarのサイズを小さくすることが可能です。

バイトコードについては、ちょっとわかりません。これから勉強する。よかったら
あなたも。

12 :名無しさん@1周年:2000/07/30(日) 11:46

     γ      /ヽ      ヘ     ヽ ヽ
  (o )'    /             ヽ    ヽ(o )
   /      / / // /|  ||  |   |ヽ    |  ヽ
  |      | | | | / |  | |  |   | ヽ    |   |
  |  |  |  | | | / |  | |  | |  |  |   |    |
  W|_|    |. V V_   V V _ V V|     ||   |
    |    |' /T ̄Т      Т ̄Tヽ|   |  | 〜 v
    |    |   ̄ ̄   @`    ̄ ̄  | |  ||  / ̄ ̄ ̄ ̄ ̄
    ν |  | ////          //// | ノ  | < もう知らないんだから!
     | \ >       へ        ν  | |  \_____
      ゝ    \             /| |  ノ |
       V W  _ト  ___  イ_ |ノ  /v
   / ̄ ̄ ̄  |         |   ̄ ̄ ̄ ヽ
   |                                |
   .|         \       /       |


13 :しょうげきくん:2000/07/30(日) 11:56
な、なんだ!

エシュロンの番組面白かったね。ところで、Java2のクラスファイルの
フォーマットに対応したバイトコードビューワーをご存知の方がおられ
ましたらぜひ教えて下さい。

14 :ひろゆ子@fw137165.kitanet.ne.jp:2000/07/30(日) 18:39
>「クラスファイル」は小さくなったけれど、「バイトコード」
>は小さくなっていないのではないかもしれません。
現実的にファイルサイズが小さくなってれば、
それで目的達成のように感じるのですが、、


15 :名無しさん@1周年:2000/07/30(日) 18:43
バイトコード−ビューワーって、javapとかとはまた違うんですか?

あー、Obfuscatorどれもこれも高いよぅ。
誰ぞフリーで作らんかしら(他力本願)。

16 :しょうげきくん:2000/07/30(日) 19:26
夏はあつくてジョギング出来ない。

>14 僕もそう思うのですが、僕の意見を否定する人がいるということは
、僕は何か大事なことを知らないのではないかと考えたのです。出来る
限り正確に把握しておきたいです。サイバードの(新?)技術とやらにも
興味があります。

>15
それが必要なのはエンタープライズユース(意味不明)でしょうから、
いくら高くても買うのでしょう。ぼくは、おぶふぁすけーとされたクラス
に対してはリフレクションやシリアライズが関連する部分がダメになる
でしょう。その辺をどう対処、あるいは回避しているのかに興味があり
ます。javap...物足りない...

17 :しょうげきくん:2000/07/30(日) 19:38
そもそもなんで携帯のJavaでバイトコードのサイズを小さくしなければならないん
でしょうか? クラスファイルを小さくしてダウンロード時間やメモリのフットステ
ップを縮小とかでしょうか? でもでも「次世代携帯電話で動画送れます」なんかに
比べればそんなの微々たるもんじゃないんですか?その時代に300KBのアプレットが
100KBになってうれしい?

はっきり言ってクラスファイルの圧縮がそんなに大したもんなのか?僕にはよくわか
んないです。

18 :名無しさん@1周年:2000/07/30(日) 20:48
わからないならだまってろ。

19 :しょうげきくん:2000/07/30(日) 21:18
>>あ、、、衝撃くん。だぁ、、
>>さておき、javaのソースの変数名を短くすると、
>>バイトコードも短くなるんですか?
>当たり前すぎて回答する気にもならないぐらいですが、一応。
>ねーよ、そんなこと。

>わからないならだまってろ。

今日はあおられまくりの日曜日でした。
プライドが傷付きました。夜空がきれいです。さようなら。

20 :バッカーです:2000/07/30(日) 21:41
オレの知ってる衝撃くんは
1年前に禁煙した衝撃くん


21 :名無しさん@そうだ選挙にいこう:2000/07/30(日) 21:59
メイン板で毎回彼女が出てくる日記を書いていた衝撃くんと同じ人でしょ?

22 :しょうげきくん:2000/07/30(日) 22:12
衝撃君は「なんつーか、あれから1年か」って言ってました。

さて、元のネタに戻りましょう。外部からリフレクションでinvoke
される可能性のあるメソッドをobfuscateしてしまうとプログラムが
動かなくなるので、その可能性のあるクラスやメソッドはobfuscate
の対象から除外するように設定しなければならないでしょう。

SourceGuardはその辺りは非常に細かな設定が可能で、例えばobfuscate
するメソッドとしないメソッドを、メソッドの型やメソッド名で決める
ことが可能です。でも、とってもメンドクサイ。僕らはobfuscate非対象
のクラスは別のパッケージ、別のjarファイルにすることで対応しました
。原始的ですけどね、確実です。

それから、JBuilderにもObfuscateする機能があったと思います>15
JBuilderってフリーのバージョンがありましたよね。


23 :新米ギコ>22:2000/07/30(日) 23:10
      ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′ ̄ ̄( ゚Д゚)< http://www.inprise.co.jp/jbuilder/だ!!
 UU ̄ ̄ U U  \つーかCマガとかjavaなんたらについてるの利用
             \_____________


24 :名無しさん@1周年:2000/07/30(日) 23:38
JBuilder、バグだらけなんだけどどうにかならないのかなぁ

25 :激(笑)君:2000/07/31(月) 03:49
JB35WinってC:\JBuilder35にインストールしないと
HELPファイルが使えないって恐ろしいバグ有りなんですが
どうなっているんですか?


26 :>25:2000/07/31(月) 04:01
その程度の問題が、Java 開発に何か問題あるんかい?

27 :名無しさん@1周年:2000/07/31(月) 04:23
>21
よく覚えてるね
もう半年〜1年くらい前だっけ
結構、評判良かったと記憶している

28 :ひろゆき:2000/08/01(火) 05:25
>そもそもなんで携帯のJavaでバイトコードのサイズを小さくしなければならないん
でしょうか?
i-modeの現在のメモリが5kだから、それほど多量のメモリが搭載されるとは
おもえないんですよ。そうすると、昔のファミコンのゲームのように、
コードを詰めたりとかシコシコ努力しなきゃいけないきがするんですが、、、
結局、バイトコードのサイズが小さくなれば、解決なきがするんですが、
どうなんでしょうね。。

29 :しょうげきくん:2000/08/01(火) 06:32
おはようしょうげきくん朝型。

ツールをつかえば、クラスファイルのサイズを1/2から1/3にすること
が可能です。人間様がシコシコ努力する必要は全くありません。使用
メモリも小さくなり、実行速度の向上も望めます。実行環境の貧弱な
モバイルツールで有用でしょう(教科書的)。

しかし、色々問題があり、運用が難しいも事実です。22で書いたように
簡単に小さくしてはいけないという問題があるからです。また、実行環
境の進歩が激しく、このような開発側の努力はすぐに無意味化しがちで
す。世の中のスピードはファミコンの頃とは全然違います。

複雑でメンドクサイ技術は、結局埋もれてゆきます。

30 :名無しさん@1周年:2000/08/01(火) 06:38
KVM?が動くとなれば、もうちょいメモリ載ってくれるのかな。
って、そういやデバッグどうするんだろう。
一応アンチ携帯を返上して、Java載ったら1台購入予定だけど。

31 :新米ギコ:2000/08/01(火) 09:04
   _____
 /:\.____\  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 |: ̄\ (∩゚Д゚)\< 一つのクラスに詰込んだら小さくなるのかなあ?
 |:   |: ̄ ̄ U ̄:| \__________

32 :ひろゆき:2000/08/05(土) 07:15
sage

12 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)