Le bytecode Java a été optimisé pour être exécuté par un interpréteur, les JVM précoces n'avaient pas encore de Hotspot. .NET msil a été conçu dès le premier jour à toujours être jitted, pas d'opcodes spéciaux pour les différents types d'opérandes étaient nécessaires.
La gigue connaît le type d'opérande à partir de l'état de la pile. Quel que soit l'opcode poussé une valeur sur la pile indique également le type. Dites un Opcodes.Ldarg_0, la gigue connaît le type de la signature de la méthode. Garder la trace de l'état de la pile est quelque chose que vous ne voulez jamais avoir à faire dans un interpréteur, il ralentit considérablement l'exécution du code, une gigue ne doit le faire qu'une seule fois.