Question

Dans une question récente posée récemment, ma réponse simple a souligné de nombreuses idées fausses sur Java, la machine virtuelle Java et la manière dont le code est compilé et exécuté. Cela a créé un désir en moi de porter ma compréhension à un niveau inférieur. Je n'ai aucun problème avec la compréhension de bas niveau telle que l'assemblage, mais le bytecode et la JVM me déroutent. La façon dont le code orienté objet est décomposé à un niveau bas est perdue pour moi. Je me demandais si quelqu'un avait des suggestions sur la manière de se renseigner sur la JVM, le bytecode et le fonctionnement de niveau inférieur de Java. Existe-t-il des utilitaires qui vous permettent d’écrire et d’exécuter le bytecode directement, car je pense que l’expérience pratique de quelque chose est le meilleur moyen d’améliorer sa compréhension? De plus, des suggestions de lecture sur ce sujet seraient appréciées.

Modifier: question secondaire. J'ai donc une sorte de question secondaire, les réponses m'ont donné une idée intéressante d'apprendre sur le jvm, quelle serait la plausibilité d'écrire un langage très simple comme brainf ** k ou Ook uniquement dans une syntaxe lisible (peut-être que je pourrais même le développer soutenir oo éventuellement) qui compile en code binaire soit? Serait-ce une bonne expérience d'apprentissage?

Était-ce utile?

La solution

Lectures suggérées: la spécification JVM .

Vous pouvez également jouer avec BCEL - il existe d'autres bibliothèques pour manipuler le bytecode, mais c'est probablement le plus connu.

Autres conseils

Le Apache BCEL vous permettra d'analyser et de manipuler des fichiers .class à partir de bytecode.

javap vous permettra de démonter fichiers .class existants. Il est particulièrement utile pour les classes de tests rapides de comprendre ce qui se passe réellement sous les couvertures.

J'ai appris en lisant le didacticiel ASM et la discussion avec la bibliothèque elle-même.

IMHO, ASM est meilleur que BECL.

  

BCEL est déjà utilisé   avec succès dans plusieurs projets tels   comme compilateurs, optimiseurs,   obsfuscateurs, générateurs de code et   outils d'analyse. Malheureusement là   pas beaucoup de développement en cours   ces dernières années . Ne hésitez pas à   aider ou vous voudrez peut-être un   examinez le projet ASM à   objectweb.   - http://jakarta.apache.org/bcel/

Il existe une seule source fiable pour la compréhension de la machine virtuelle Java

Le Java & # 174; Spécifications de la machine virtuelle Java SE 7 Edition

http://docs.oracle.com/javase/ specs / jvms / se7 / html / index.html

La

Programmation pour la machine virtuelle Java est un bon livre pour ce sujet. (Divulgation: je travaille avec l'auteur.)

Pour comprendre l'architecture de Java / JVM: lisez Wikipedia, les spécifications et le code source.

Pour comprendre comment le code orienté objet est créé à un niveau bas: essayez d'imiter des fonctionnalités telles que l'héritage / le polymorphisme / l'encapsulation dans un langage de niveau inférieur tel que le langage C.

En C, vous pouvez obtenir ce qui précède en combinant par exemple des pointeurs de fonction et des structures imbriquées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top