de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 LaurentG
LaurentG
Question

Ukuran maksimum dari suatu metode dalam Java 7 dan 8

Saya tahu bahwa metode ini tidak dapat lebih besar dari 64 KB dengan Jawa. Keterbatasan menyebabkan kita masalah dengan kode yang dihasilkan dari Javacct tata bahasa. Kami punya masalah dengan Java 6 dan mampu memperbaiki hal ini dengan mengubah tata bahasa. Memiliki batas yang telah berubah Jawa untuk 7 atau direncanakan untuk Java 8?

Hanya untuk membuat jelas. Saya don't perlu metode yang lebih besar dari 64 KB dengan diriku sendiri. Tapi saya menulis tata bahasa yang mengkompilasi yang sangat besar metode.

77 2013-07-02T09:51:06+00:00 5
Peter Mortensen
Peter Mortensen
Pertanyaan edit 8 Juli 2013 в 7:29
Pemrograman
java
java-8
java-7
Solution / Answer
 Andremoniy
Andremoniy
2 Juli 2013 в 9:57
2013-07-02T09:57:15+00:00
Lebih
Sumber
Sunting
#19807442

Menurut JVMS7 :

fakta bahwa end_pc eksklusif adalah kesalahan sejarah di desain mesin virtual Java: jika mesin virtual Java code untuk metode ini persis 65535 byte yang panjang dan berakhir dengan sebuah instruksi itu adalah 1 byte panjang, maka instruksi yang tidak dapat dilindungi oleh handler pengecualian. Compiler penulis dapat bekerja di sekitar bug ini oleh membatasi ukuran maksimum yang dihasilkan mesin virtual Java code untuk setiap metode, contoh inisialisasi metode, atau statis penginisialisasi (ukuran dari kode array) untuk 65534 byte.

Tapi ini adalah tentang Jawa 7. <menyerang>tidak Ada spesifikasi akhir untuk Java 8, jadi tidak ada (kecuali pengembang) bisa menjawab pertanyaan ini.</strike>

UPD (2015-04-06) Menurut JVM8 hal ini juga berlaku untuk Jawa 8.

 Andremoniy
Andremoniy
Jawaban edit 6 April 2015 в 12:05
58
0
Anders  R. Bystrup
Anders R. Bystrup
2 Juli 2013 в 9:58
2013-07-02T09:58:44+00:00
Lebih
Sumber
Sunting
#19807443

Pertanyaan yang bagus. Seperti biasa kami harus pergi ke sumber untuk menemukan jawabannya ("Java® Mesin Virtual Spesifikasi"). Bagian yang tidak secara eksplisit menyebutkan batas (seperti yang dilakukan Java6 VM spec) meskipun, tapi agak hati-hati:

jumlah terbesar dari lokal variabel lokal variabel array dari sebuah frame dibuat atas permintaan dari metode (§2.6) adalah terbatas untuk 65535 dengan ukuran max_locals item Kode atribut (§4.7.3) memberikan kode metode, dan 16-bit variabel lokal pengindeksan Mesin Virtual Java set instruksi.

Cheers,

11
0
Philipp Cla&#223;en
Philipp Claßen
15 Januari 2015 в 1:30
2015-01-15T01:30:11+00:00
Lebih
Sumber
Sunting
#19807446

Itu tidak berubah. Batas kode dalam metode ini masih 64 KB di Jawa 7 dan Java 8.

Referensi:

  1. Dari Jawa 7 Virtual Machine Specification (4.9.1 Statis Kendala):

statis kendala pada Mesin Virtual Java kode dalam sebuah file kelas menentukan bagaimana Java Virtual Machine petunjuk harus diletakkan dalam kode array dan apa operan dari individu instruksi harus.

statis kendala pada instruksi dalam kode array adalah sebagai berikut:

  • kode array tidak boleh kosong, jadi code_length item tidak memiliki nilai 0.
  • nilai code_length item harus kurang dari 65536.
  1. Dari Jawa 8 Virtual Machine Specification (4.7.3 Kode Atribut):

nilai code_length item memberikan jumlah byte dalam kode array untuk metode ini.

nilai code_length harus lebih besar dari nol (seperti kode array harus tidak boleh kosong) dan kurang dari 65536.

8
0
 mok
mok
25 Maret 2014 в 3:25
2014-03-25T15:25:13+00:00
Lebih
Sumber
Sunting
#19807445

Andremoniy telah menjawab jawa 7 bagian dari pertanyaan ini sudah, tapi tampaknya pada waktu itu segera memutuskan tentang jawa 8 jadi saya lengkapi jawaban untuk menutupi bagian:

Mengutip dari jvms:

fakta bahwa end_pc eksklusif adalah sejarah kesalahan dalam desain Mesin Virtual Java: jika Mesin Virtual Java code untuk metode ini persis 65535 byte yang panjang dan berakhir dengan sebuah instruksi yang 1 byte panjang, maka instruksi yang tidak dapat dilindungi oleh pengecualian handler. Compiler penulis dapat bekerja di sekitar bug ini dengan membatasi ukuran maksimum yang dihasilkan Mesin Virtual Java kode untuk setiap metode, contoh inisialisasi metode, atau statis penginisialisasi (ukuran dari kode array) untuk 65534 byte.

Seperti yang anda lihat ini tampaknya sejarah masalah doesn't tampaknya untuk memperbaiki setidaknya di versi ini (java 8).

 mok
mok
Jawaban edit 25 Maret 2014 в 7:03
1
0
 ombud
ombud
2 Juli 2013 в 9:49
2013-07-02T21:49:08+00:00
Lebih
Sumber
Sunting
#19807444

Sebagai solusi, and if anda memiliki akses ke parser's kode, anda bisa memodifikasinya untuk bekerja dalam apa pun yang 'batas-batas yang dikenakan oleh JVM compiler ... (Dengan asumsi itu den't mengambil selamanya untuk menemukan bagian-bagian di parser kode untuk mengubah)

-1
0
Related communities 3
Programmer JAVA indonesia
Programmer JAVA indonesia
1 223 pengguna
Buka telegram
jvmusergroup
jvmusergroup
277 pengguna
Bismillahirrohmanirohim. Perhatian! Grup ini merupakan ekspansi dari grup Forum Java Programmer Indonesia di Facebook. Silahkan berbagi pengalaman dan masalah seputar Java dan keluarganya. https://t.me/JVMIndonesia Admin : @hendisantika34
Buka telegram
Java Indonesia🇲🇨
Java Indonesia🇲🇨
145 pengguna
Programmer Java Indonesia. Grup ini digunakan untuk bertanya terkait materi belajar Java / fullstack Warning=> -dilarang promosi(izin adm -18+🔞 - berbicara sopan - no spam /boot Mohon ikut aturan grup belum di keluarkan
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Виталий Теслюк
Terdaftar 7 jam yang lalu
2
shokir qochqorov
Terdaftar 9 jam yang lalu
3
Roxana Elizabeth CASTILLO Avalos
Terdaftar 1 minggu yang lalu
4
Hideo Nakagawa
Terdaftar 1 minggu yang lalu
5
Sergiy Tytarenko
Terdaftar 1 minggu yang lalu
ID
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi