- PR -

javaプログラムの長さに制限はあるか

投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-12-17 20:58
引用:

unibonさんの書き込み (2006-12-17 13:09) より:
引用:

インギさんの書き込み (2006-12-17 12:59) より:
人間側の理解力の制限は実装によって異なりますが、多くの処理系では一クラス500〜1000行を超えた当たりから動作が不安定になります。





ゴールデンさんのプロファイルから辿って、過去のご投稿に書かれているソースコードをいくつか拝見させていただきましたが、コードが長いと、人間も機械も動作が不安定になると思います。たぶん、機械側の問題である可能性は低いと思いますが、いずれにしてもコードを短くされることをされたほうが良いと思います。
「短く」と言っても、単にメソッドを等分割して個々のメソッドを小さくするのでは恐らくダメです。
なお、Graphics 関係の全般に言えることですが、とにかく表示が更新されないということを泥縄式に解決するのならば、至るところに repaint や revalidate(Swing の場合。AWT だけなら invalidate や validate の組み合わせ)を散りばめると良いこともあります。根本的な解決ではないですが。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
ゴールデン
常連さん
会議室デビュー日: 2004/08/22
投稿数: 46
投稿日時: 2006-12-17 22:27
皆さん、ありがとうございます。
コンパイラは、j2se1.4_02です。実行環境は最新の物です。
unibonさんには、プログラムの傾向まで見ていただいてありがとうございます。
まずは、実行プログラムを短くしてみます。
a-san
ベテラン
会議室デビュー日: 2004/06/01
投稿数: 53
投稿日時: 2006-12-18 00:42
インギさんが少し書いてましたが・・・。
一応、classファイルに制限はあります。
定数の数:2バイト
実装しているインターフェースの数:2バイト
フィールドの数:2バイト
メソッドの数:2バイト
・・・などです。つまり、それぞれ65535個までです。
また、Javaコードでジャンプするときに指定できるのは、符号付2バイトの相対アドレスです。
なので32KBを超えるジャンプはできません。例えば、if文やfor文の中身のコードが32KBを超えるものは作れません。

フツーのプログラムならこの制限に引っかかることはないのです。
今回のclassファイルのサイズってどのぐらいの大きさなのでしょう?
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2006-12-18 02:07
javapコマンドを使って、コンパイルされたクラスを確認してみては?

コード:
> javap -classpath <クラスパス> -private <クラス名>


これで全部のメソッドが表示されるなら、コンパイルには問題ないと思います。
ゴールデン
常連さん
会議室デビュー日: 2004/08/22
投稿数: 46
投稿日時: 2006-12-28 21:49
実行されるようにはなりました。
しかし、完全解決ではありません。
Imageを引数で扱うことに何か制限があるかもと思い、引数からとって別の方法で引き渡したらできました。
そう言えば以前にもImageを扱う時にdrawImageを別クラスからは送ることができなかったことがありました。
drawはImageでなければ普通にできたのですが…。
など、もしかしたら、Imageの変数に関しては普通の変数とは違い、何らかの制限があるような気がします。(何かは分かりませんが)
実行されましたが、分からなかったことが分かるようになったわけではないのでスッキリ解決ではないですが、アドバイスしてくださった方々、いろいろな知識を教えてくださって本当にありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)