La sezione 2.11.1 della specifica JVM 8 include le parole:
In other words, the instruction set is intentionally not orthogonal.
Dal mio punto di vista, ciò implica che il set di istruzioni bytecode Java sia pieno di hack sporchi. Capisco che i progettisti erano limitati a un solo byte per rappresentare opcodes, ma poi hanno consumato 8 opcode per aload e astore, per non parlare dei singoli opcode per iload, fload, dload, ecc. L'unica ragione per cui posso pensare di fare il il set di istruzioni nonorthogonal è di ottimizzarlo per i sistemi con vincoli di memoria **; sembra che queste decisioni di progettazione rendano più difficile scrivere ottimizzatori, per non parlare del limite del set di istruzioni.
Sicuramente mi manca qualcosa. Perché i progettisti Java lo hanno fatto in questo modo?
** Quando dico "vincolato alla memoria", ciò a cui mi riferisco è la dimensione del bytecode stesso. Presumibilmente il motivo per cui hanno aload_0 è perché salva un byte su aload 0, ed è usato a ton .