Apakah ada ukuran maksimum untuk kode di Java? Saya menulis fungsi dengan lebih dari 10.000 baris. Sebenarnya, setiap baris memberikan nilai ke variabel array.
arts_bag[10792]="newyorkartworld";
arts_bag[10793]="leningradschool";
arts_bag[10794]="mailart";
arts_bag[10795]="artspan";
arts_bag[10796]="watercolor";
arts_bag[10797]="sculptures";
arts_bag[10798]="stonesculpture";
Dan saat kompilasi, saya mendapatkan kesalahan ini: kode terlalu besar
Bagaimana cara mengatasinya?
java
arrays
compiler-errors
code-size
Trinitas
sumber
sumber
Jawaban:
Tapi Anda harus membersihkannya!
Gunakan
.properties
file untuk menyimpan data ini, dan muat melaluijava.util.Properties
Anda dapat melakukan ini dengan menempatkan
.properties
file di classpath Anda, dan menggunakan:Properties properties = new Properties(); InputStream inputStream = getClass().getResourceAsStream("yourfile.properties"); properties.load(inputStream);
sumber
Ada batas ukuran kode 64K byte pada sebuah metode
Karena itu, saya harus setuju dengan Richard; mengapa Anda membutuhkan metode sebesar itu? Diberikan contoh di OP, file properti harus cukup ... atau bahkan database jika diperlukan.
sumber
enum
untuk dilihatMenurut spesifikasi Java Virtual Machine , kode metode tidak boleh lebih besar dari 65536 byte :
code_length
mendefinisikan ukurancode[]
atribut yang berisi bytecode sebenarnya dari suatu metode:sumber
Ini sepertinya agak gila. Bisakah Anda tidak menginisialisasi array dengan membaca nilai dari file teks, atau sumber data lainnya?
sumber
Kesalahan ini terkadang terjadi karena kode yang terlalu besar dalam satu fungsi ... Untuk mengatasi kesalahan tersebut, bagi fungsi itu menjadi beberapa fungsi, seperti
//Too large code function private void mySingleFunction(){ . . 2000 lines of code } //To solve the problem private void mySingleFunction_1(){ . . 500 lines of code } private void mySingleFunction_2(){ . . 500 lines of code } private void mySingleFunction_3(){ . . 500 lines of code } private void mySingleFunction_4(){ . . 500 lines of code } private void MySingleFunction(){ mySingleFunction_1(); mySingleFunction_2(); mySingleFunction_3(); mySingleFunction_4(); }
sumber
Cobalah untuk mengubah kode Anda. Ada batasan ukuran metode di Jawa.
sumber
Seperti yang disebutkan dalam jawaban lain, ada 64KB batas bytecode untuk sebuah metode (setidaknya dalam kompiler java Sun)
Bagi saya, akan lebih masuk akal untuk memecah metode itu menjadi lebih banyak metode - masing-masing menugaskan hal-hal terkait tertentu ke array (mungkin lebih masuk akal untuk menggunakan ArrayList untuk melakukan ini)
sebagai contoh:
public void addArrayItems() { addSculptureItems(list); ... } public void addSculptureItems(ArrayList list) { list.add("sculptures"); list.add("stonesculpture"); }
Alternatifnya, Anda dapat memuat item dari sumber daya statis jika item tersebut diperbaiki seperti dari file properti
sumber
Saya sendiri mengalami masalah ini. Solusi yang berhasil bagi saya adalah memfaktor ulang dan mengecilkan metode menjadi bagian yang lebih mudah diatur. Seperti Anda, saya berurusan dengan metode garis hampir 10K. Namun, dengan penggunaan variabel statis serta fungsi modular yang lebih kecil, masalah telah teratasi.
Sepertinya akan ada solusi yang lebih baik, tetapi menggunakan Java 8, tidak ada ...
sumber
Anda dapat menambahkan metode lain untuk membuat ruang bagi kode Anda untuk ruang data tambahan, Anda mungkin memiliki metode yang menghabiskan banyak ruang data. Coba bagi metode Anda karena saya memiliki masalah yang sama dan dan perbaiki dengan membuat metode tambahan lain untuk data yang sama dalam kode Java Android saya, Masalahnya hilang setelah saya melakukan itu.
sumber
Saya memiliki enum yang menyebabkan file .java berukuran lebih dari 500KB. Eclipse dapat membuatnya karena beberapa alasan; build.xml semut yang diekspor gerhana tidak bisa. Saya sedang memeriksa ini dan akan memperbarui posting ini.
sumber
Karena ada batasan ukuran untuk metode dan Anda tidak ingin mendesain ulang kode Anda saat ini, mungkin Anda dapat membagi array menjadi 4-5 bagian dan kemudian memasukkannya ke dalam metode yang berbeda. Pada saat membaca larik, panggil semua metode dalam satu rangkaian. Anda juga dapat mempertahankan penghitung untuk mengetahui berapa banyak indeks yang telah Anda parse.
sumber
ini karena semua kode dalam solusi metode tunggal: buat lebih beberapa metode kecil maka kesalahan ini akan hilang
sumber
ok mungkin jawaban ini sudah terlambat tapi menurut saya cara ini lebih baik dari cara lain gitu
misalnya, kami memiliki 1000 data baris dalam kode
Hancurkan mereka
private void rows500() { //you shoud write 1-500 rows here } private void rows1000() { you shoud write 500-1000 rows here }
untuk kinerja yang lebih baik, masukkan "jika" dalam kode Anda
if (count < 500) { rows500(); } else if (count > 500) { rows1000(); }
Saya harap kode ini membantu Anda
sumber