人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

二つのマシン(機種は異なる)に同一バージョンのeclipseとJDKをインストールしています。このマシンに対してCVSからソースをチェックアウトしてきます。こういった状況下で、a.java・b.java、c.java・・・をコンパイルした場合、a.classのファイルサイズが二つの環境下で異なることはあるでしょうか?(a.javaはまったく同じソースファイルで、b.java以降はソースが異なる可能性もあります。)もし異なるなら何が原因なのかお教えください。

●質問者: riceflow
●カテゴリ:コンピュータ 学習・教育
✍キーワード:Class CVS eclipse Java JDK
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kacchan6
●30ポイント

http://www.yahoo.co.jp/

Yahoo! JAPAN

a.classからb.classを参照していませんか?

例えば、

public class a{

private String str = b.VALUE;

}

public class b{

public static final String VALUE = ”aaa”;

}

みたいなソースの場合、

aからはbのVALUEを参照しているので、

aのサイズは変わらないと思われがちですが、

Stringとプリミティブ型のstatic finalで宣言された値は

コンパイラの最適化フェーズで自動的に

インライン化されるため、

実質

public class a{

private String str = ”aaa”;

}

というコードをコンパイルしていることになります。

ですので、b.classの内容が変われば、

当然a.classの内容も変わることがあります。

コンパイラの実装によっても違いますが、

定数だけではなく、メソッドもバイトコードレベルでインライン化されますので、

参照先のクラスが違えば同じコードでも

コンパイル後のサイズが違うというのは十分に起こりうる現象となります。

◎質問者からの返答

やはりそうなのですか。ありがとうございます。勉強になります。


2 ● ほねほね
●20ポイント

http://java-house.jp/ml/archive/j-h-b/016071.html

[JavaHouse-Brewers:16071] [Q]:static final $B$NJ8;zNs$K$D$$$F(B

a.javaがb.java以降のstatic final な文字列を参照している場合は、staticリンクなのでその文字列を取り込んでいる場合があります。

その場合、コンパイルのタイミングでサイズが違う場合があります。

もちろん、フルビルドを行えば同一のサイズになります。

◎質問者からの返答

ありがとうございます。勉強になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ