Berapa jumlah maksimum parameter yang dimiliki oleh suatu metode di Java dan mengapa?
Saya menggunakan Java 1.8 pada sistem Windows 64-bit.
Semua jawaban di StackOverflow tentang ini mengatakan bahwa batas teknisnya adalah 255 parameter tanpa menyebutkan alasannya.
Tepatnya, 255 untuk this
metode statis dan 254 untuk metode non-statis ( akan menjadi 255 dalam kasus ini).
Saya pikir ini bisa dijelaskan dalam semacam spesifikasi dan bahwa hanya ada jumlah maksimum parameter statis yang diizinkan.
Tapi ini hanya berlaku untuk int
dan semua tipe 4-byte . Saya melakukan beberapa tes dengan long
parameter, dan saya hanya bisa mendeklarasikan 127 parameter dalam kasus itu.
Dengan String
parameter, jumlah yang diizinkan yang saya simpulkan dari pengujian adalah 255 (mungkin karena ukuran referensi adalah 4 byte di Jawa?).
Tetapi karena saya menggunakan sistem 64-bit, ukuran referensi harus lebar 8 byte dan dengan String
parameter, jumlah maksimum yang dibolehkan adalah 127, mirip dengan long
tipe.
Bagaimana batas ini diterapkan secara tepat?
Apakah batas itu ada hubungannya dengan ukuran tumpukan metode?
Catatan: Saya tidak benar-benar akan menggunakan banyak parameter ini dalam metode apa pun, tetapi pertanyaan ini hanya untuk memperjelas perilaku yang tepat.
<= 4
. Sesuatu yang lebih mungkin harus dibungkus menjadi suatu objek.Jawaban:
Batas itu didefinisikan dalam Spesifikasi JVM :
Bagian §4.3.3 memberikan beberapa informasi tambahan:
Pengamatan Anda sangat tepat, kata primitif ganda (
long
/double
) membutuhkan dua kali ukuran variabel 4 byte biasa dan 4 contoh referensi objek objek .Mengenai bagian terakhir dari pertanyaan Anda terkait dengan sistem 64bit, spesifikasi menentukan berapa banyak unit yang dikontribusikan parameter , bagian dari spesifikasi itu masih harus dipenuhi bahkan pada platform 64bit, JVM 64bit akan mengakomodasi 255 parameter instance (seperti 255 Anda
Strings
) terlepas dari ukuran pointer objek internal.sumber
long
dandouble
terlepas dari arsitektur sistem terjadi di banyak tempat spesifikasi dan tampaknya merupakan sisa dari era 32-bit.Bagian 4.3.3 dari spesifikasi JVM memiliki informasi yang Anda cari:
Oleh karena itu tampak bahwa apakah mesin-host adalah 32-bit atau 64-bit tidak berpengaruh pada jumlah parameter. Jika Anda perhatikan, dokumentasi berbicara dalam istilah "unit", di mana panjang satu "unit" adalah fungsi dari ukuran kata. Jika jumlah parameter berbanding lurus dengan ukuran kata, akan ada masalah portabilitas; Anda tidak akan dapat mengkompilasi program Java yang sama pada arsitektur yang berbeda (dengan asumsi bahwa setidaknya satu metode menggunakan jumlah maksimum parameter pada arsitektur dengan ukuran kata yang lebih besar).
sumber
Saya menemukan masalah menarik dari buletin tentang ini, http://www.javaspecialists.eu/archive/Issue059.html
sumber