2011-07-04 16 views
22

Vengo a sapere che la dimensione massima di un metodo in java è 64k. E se supera, avremo un avvertimento del compilatore come "Codice troppo grande per compilare". Quindi possiamo chiamare questo uno svantaggio di java con questa piccola quantità di memoria.Dimensione massima di un metodo in java?

Possiamo aumentare questo limite di dimensioni o è davvero possibile aumentare?

Qualche altra idea riguardo questa dimensione del metodo?

+1

(a) Dove l'avete letto? (b) Perché è importante? –

+24

Questo limite deve essere impostato su 2k, per applicare il refactoring e un bel design :) Molto come il limite dei 255 parametri del metodo dovrebbe essere impostato su 10. –

+3

E (b) Se il tuo codice è più grande di 64kb per un singolo metodo ... forse è il momento di refactory? – SJuan76

risposta

36

Nella mia esperienza il limite di 64 KB è solo un problema per il codice generato. esp. quando si inizializza un array di grandi dimensioni (fatto in codice)

In un codice ben strutturato, ciascun metodo è di lunghezza gestibile ed è molto più piccolo di questo limite. Grandi pezzi di dati, da caricare negli array, possono essere letti da un file non Java come un testo o un file binario.

EDIT:

E 'da notare che il JIT non verrà compilato metodi più grande di 8 K. Questo significa che il codice viene eseguito più lento e può avere un impatto i tempi GC (in quanto è meno efficiente per cercare lo stack di chiamate di un thread con metodi che non sono compilati quelli esp grandi)

Se possibile, si desidera limitare i vostri metodi di 8 K, piuttosto che a 64 K.

+7

+1: il limite è un vero dolore per il codice generato. –

+3

La mia soluzione per il limite era di generare metodi per ogni N righe di codice generato. Quindi chiamali tutti in un nuovo metodo. – Diederik

+2

@Diederik è un peccato che il compilatore non sia abbastanza intelligente da farlo per te, o che il codice byte supporti metodi più grandi. –

6

64k è un bel po ', se lo superi puoi pensare a riorganizzare il tuo codice.

Nel mio progetto ho incontrato questo vincolo una volta nelle sorgenti generate. Risolto semplicemente dividendo un metodo in più.

3

Se il metodo è più lungo di 50 righe compresi i commenti all'interno - Spalato esso. In questo caso non raggiungerai mai alcuna limitazione (anche se ne esiste una).

Personalmente ho visto 1000 righe di metodi lunghi (scritti da criminali che si chiamano programmatori :)) ma non ho visto questo tipo di limitazione.

+6

È più comune in 2 casi: (a) JSP, che è dove inciampò su di esso; e (b) codice generato. In entrambi i casi può essere un lavoro enorme per garantire che il tuo bytecode sia sempre sotto 64k. – corlettk

Problemi correlati