2011-07-04 4 views
22

Je viens de savoir que la taille maximale d'une méthode en Java est 64k. Et si cela dépasse, nous recevrons un avertissement du compilateur comme "Code too large to compile". Alors pouvons-nous appeler cela un inconvénient de Java avec cette petite quantité de mémoire. Pouvons-nous augmenter cette limite de taille ou est-il vraiment possible d'augmenter?Taille maximale d'une méthode dans Java?

Plus d'idée concernant cette taille de méthode?

+1

(a) Où avez-vous lu ceci? (b) Pourquoi est-ce important? –

+24

Cette limite devrait être fixée à 2k, pour appliquer le refactoring et le design sympa :) Tout comme la limite de 255 paramètres de la méthode devrait être fixée à 10. –

+3

Et (b) Si votre code est plus grand que 64kb pour une seule méthode ... peut-être qu'il est temps de refactoriser? – SJuan76

Répondre

36

esp. lors de l'initialisation de grands tableaux (ce qui est fait dans le code)

Dans un code bien structuré, chaque méthode est une longueur gérable et est beaucoup plus petite que cette limite. De gros morceaux de données, à charger dans des tableaux, peuvent être lus à partir de fichiers non Java comme un fichier texte ou binaire.

EDIT:

Il ne vaut rien que le JIT ne compile pas des méthodes plus de 8 K. Cela signifie que le code est plus lent et peut influer sur les temps de GC (car il est moins efficace de rechercher la pile d'appel d'un fil avec des méthodes qui ne sont pas compilé les esp grandes)

Si possible, vous voulez limiter vos méthodes à 8 K plutôt que 64 K.

+7

+1: La limite est une vraie peine pour le code généré. –

+3

Mon travail autour de la limite était de générer des méthodes pour chaque N lignes de code généré. Puis appelez-les tous dans une nouvelle méthode. – Diederik

+2

@Diederik c'est dommage que le compilateur ne soit pas assez intelligent pour le faire pour vous, ou que le code octet supporte des méthodes plus grandes. –

6

64k est beaucoup, si vous le dépassez, vous pouvez penser à réorganiser votre code.

Dans mon projet, j'ai rencontré cette contrainte une fois dans les sources générées. Résolu en divisant une méthode en plusieurs. D'après mon expérience, la limite de 64 Ko est seulement un problème pour le code généré.

3

Si votre méthode est plus de 50 lignes y compris les commentaires à l'intérieur - split il. Dans ce cas, vous n'atteindrez jamais aucune limite (même s'il en existe une).

Personnellement, j'ai vu 1000 lignes longues méthodes (écrites par des criminels qui s'appellent eux-mêmes programmeurs :)), mais n'a pas vu ce genre de limitation.

+6

Il se rapproche le plus souvent dans 2 cas: (a) JSP, qui est où je trébuché dessus; et (b) code généré. Dans les deux cas, il peut être fastidieux de s'assurer que votre bytecode est toujours inférieur à 64k. – corlettk