2011-07-04 22 views
22

私はjavaのメソッドの最大サイズが64kであることに気付きました。それを超えると、「コンパイルするにはコードが大きすぎます」というようなコンパイラの警告が表示されます。したがって、この小さな量のメモリで、これをJavaの欠点と呼ぶことができます。javaのメソッドの最大サイズは?

このサイズ制限を増やすことはできますか、それとも本当に増やすことはできますか?

この方法のサイズに関するこれ以上のアイデアはありますか?

+1

(a)お読みになりましたか? (b)それはなぜ重要なのでしょうか? –

+24

リファクタリングと素敵なデザインを実現するために、この制限は2kに設定する必要があります:) 255のメソッドパラメータの制限と同じように10に設定する必要があります。 –

+3

(b)コードが1つのメソッドで64kbを超える場合多分それはリファクタリングの時間ですか? – SJuan76

答えて

36

私の経験では、64KBの制限は生成されたコードにのみ問題です。特に大規模な配列をインテリアーシングするとき(コードで行われる)

よく構造化されたコードでは、各メソッドは管理可能な長さであり、この制限よりもはるかに小さい。配列にロードされる大量のデータは、テキストファイルやバイナリファイルなどのJava以外のファイルから読み取ることができます。

EDIT:

それはコールスタックを検索するあまり効率的であるとして、JITが(このコードが実行速度は低下し、GC時間に影響を与えることができることを意味し8 K.よりも大きなメソッドをコンパイルしません何も価値がありません)ESP大きなものをコンパイルされていないメソッドを持つスレッドの

あなたはあなたの方法は、長い内部コメントを含む50行を超える場合は8 Kではなく64 K.

+7

+1:生成されたコードには限界があります。 –

+3

制限のための私の仕事は、生成されたコードのN行ごとにメソッドを生成することでした。それから新しい方法でそれらをすべて呼んでください。 – Diederik

+2

@Diederikその恥ずかしがり屋コンパイラはあなたのためにそれを行うのに十分スマートではない、またはバイトコードはより大きなメソッドをサポートしています。 –

6

64kこれを超えるとコードを再編成することを考えるかもしれません。

私のプロジェクトでは、生成されたソースでこの制約を一度満たしました。 1つのメソッドを複数に分割するだけで解決します。

3

にあなたの方法を制限したい可能であれば - スプリットそれ。この場合、(たとえ存在しても)決して制限に達することはありません。

私は個人的に1000行の長さのメソッド(プログラマーと呼ばれる犯罪者によって書かれたものです:)を見ましたが、そのような種類の制限は見られませんでした。

+6

これは2つのケースで最も一般的です:(a)JSPです。それを乗り越えた。 (b)生成コード。どちらの場合も、あなたのバイトコードが常に64k未満であることを保証するために多くの作業が必要な場合があります。 – corlettk

関連する問題