[解決済み] Javaメソッド宣言におけるパラメータの最大数
質問
Javaでメソッドが持つことのできるパラメータの最大数はいくつでしょうか?
64ビットのWindowsシステムでJava 1.8を使用しています。
これに関する StackOverflow のすべての回答は、技術的な制限は 255 のパラメータであり、その理由は明記されていないと述べています。
正確には、静的なものは255、非静的なものは254です (
this
が255番目となります)メソッドです。
これは何らかの仕様で記述できるもので、単純に許容されるパラメータの最大数が静的に定義されているのだと思いました。
しかし、これが有効だったのは
int
という4バイトの型と、すべての4バイトの型
.
私は、いくつかのテストを
long
パラメータでいくつかのテストを行いましたが、その場合127個のパラメータしか宣言できませんでした。
とは
String
パラメータを使用した場合、私がテストから推測した許容数は255です(Javaでは参照サイズが4バイトだからでしょうか)。
しかし、私は64ビットシステムを使用しているので、参照サイズは8バイト幅であるべきであり、そのため
String
パラメータで指定できる最大数は 127 で、これは
long
の型と同様です。
この制限は具体的にどのように適用されるのですか?
この制限は スタックサイズ と関係があるのでしょうか?
注:私は実際にはどのメソッドでもこれらの多くのパラメータを使用するつもりはありませんが、この質問は正確な動作を明確にするためだけのものです。
どのように解決するのですか?
その制限は JVM仕様 :
メソッドパラメータの数 は255個に制限されています。 メソッド記述子の定義 (§4.3.3) によって制限されます。 この を1単位とする。
セクション §4.3.3 には、いくつかの追加情報があります。
メソッド記述子は、全長255以下のメソッドパラメータを表す場合にのみ有効であり、その長さには この の寄与も含まれます。
全体の長さは、個々のパラメータの寄与を合計することで計算されます。 ここでlongまたはdouble型のパラメータは長さに2単位を、それ以外の型のパラメータは1単位を寄与します。 .
あなたの観察は的確でした、ダブルワードプリミティブ(
long
/
double
) は、通常の4バイト変数の2倍のサイズが必要です。
と4バイトのオブジェクトインスタンス参照
.
ご質問の最後の64bitシステムに関する部分ですが、仕様書ではどのように多くの
単位で定義されています。
というのがあり、その部分は
に従わなければなりません。
64ビットプラットフォームであっても、64ビットJVMは255のインスタンスパラメータ(あなたの255のような
Strings
のように)内部オブジェクトのポインターサイズに関係なく、255のインスタンスパラメーターに対応します。
関連
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] Javaで数値を小数点以下n桁に丸める方法
-
[解決済み] Eclipseが起動できない - Javaは起動したが終了コード=13を返した
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
linux run jarfile Invalid or corrupt jarfile error.
-
Javaエラーメッセージがenclosingクラスでない
-
IDEA パッケージステートメントの欠落
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決