Quel est le nombre maximum de méthodes qu'une classe Java peut avoir?

Je pense à construire une très grande classe Java, y a-t-il une limite sur le nombre de méthodes que la classe Java peut avoir? Peut-il aller dans les millions de méthodes?

Mise à jour: Le but est, oui, de faire une classe "Dieu".

26
demandé sur Phil 2010-12-03 06:00:25

4 réponses

Selon la spécification de fichier de classe Java la limite est 65535:

4.10 Limitations de la machine virtuelle Java

Les limitations suivantes de la machine virtuelle Java sont implicites dans le format de fichier class:

  • le nombre de méthodes pouvant être déclarées par une classe ou une interface est limité à 65535 par la taille de l'élément methods_count de la structure ClassFile (§4.1). Notez que la valeur de l'élément methods_count du ClassFile la structure n'inclut pas les méthodes héritées de superclasses ou de superinterfaces.
51
répondu John Kugelman 2010-12-03 03:02:40

Non. Quelques éléments pertinents de la spécification class file format :

Les limitations suivantes de la machine virtuelle Java sont implicites dans le format de fichier de classe:

  • Le pool de constantes par classe ou par interface est limité à 65535 entrées par le champ constant_pool_count 16 bits de la structure ClassFile (§4.1). Cela agit comme une limite interne sur la complexité totale d'une seule classe ou interface.

  • Le nombre de méthodes qui peuvent être déclarée par une classe ou une interface est limitée à 65535 par la taille de l'élément methods_count de la structure ClassFile (§4.1). Notez que la valeur de l'élément methods_count de la structure ClassFile n'inclut pas les méthodes héritées de superclasses ou de superinterfaces.

Je pense que cela signifie que vous pouvez avoir 65535 méthodes, mais seulement si vous n'avez pas d'autres objets qui occupent des emplacements dans le pool constant (noms de champs par exemple).

En plus de cela, il y a est aussi une taille maximale pour chaque méthode:

  • la quantité de code par méthode non native et non abstraite est limitée à 65536 octets par les tailles des indices dans exception_table de L'attribut Code (§4.7.3), dans L'attribut LineNumberTable (§4.7.8) et dans L'attribut LocalVariableTable (§4.7.9).
14
répondu Thilo 2010-12-03 03:05:15

Bien que methods_count dans la spécification VM soit U2 et donc 65535 le format d'une method_info a un name_index et un descriptor_index qui doivent tous deux pointer dans le pool constant qui a également un U2 constant_pool_count donc 32767 est le max, même cela n'est bien sûr pas possible car il ne permet pas d'autres entrées pour le nom de classe, les champs de super classe, etc.

0
répondu John Priest 2014-11-27 12:54:37

Une classe ou une interface Java peut avoir au plus 65535 méthodes. Le code d'un constructeur en Java est limité à 65535 octets. Cela concerne également le nombre maximal de ports TCP/UDP possible sur une machine.

-2
répondu F.O.O 2014-08-13 17:45:51