Je programme en Java depuis environ 8 ans et je connais assez bien le langage en tant que développeur, mais mon objectif est d'approfondir ma connaissance des internes. J'ai suivi des cours de premier cycle en conception de PL, mais ce sont des aperçus académiques très larges (dans Scheme, IIRC).
Quelqu'un peut-il suggérer un itinéraire pour commencer à fouiller les détails? Plus précisément, y a-t-il des sujets particuliers (par exemple, la collecte des ordures) qui pourraient être plus accessibles ou constituer un bon point de départ? Existe-t-il un livre de haut niveau décent sur les composants internes de la JVM et la conception du langage de programmation Java? Mon approche actuelle consistera à commencer par la spécification JVM et à effectuer des recherches au besoin.
SUPER
réellement l' indicateur dans les fichiers de classe? La plupart de cela est décrit dans la spécification JVM elle-même, mais cela nécessite un peu de travail pour le sortir de là et dans votre cerveau ;-)Réponses:
J'ai fait un peu de cela lorsque j'ai commencé avec Java, il y a des années. Mon approche était de lire la spécification VM et de regarder la sortie de javap -c, qui affiche le bytecode désassemblé d'une classe. J'ai également essayé de créer des classes java avec un bytecode particulier, en utilisant un assembleur de bytecode java. Il y a un assembleur appelé jasmin , si vous voulez essayer ça.
Vous pouvez également consulter le document Lambda Expression Translation que Brian Goetz d'Oracle a publié, qui couvre la stratégie qui sera utilisée pour traduire les lambdas (fermetures, essentiellement) qui sont ajoutées dans Java 8.
Vous pouvez également obtenir le code source de la machine virtuelle Hotspot depuis OpenJDK , et la version à accès anticipé du compilateur javac avec prise en charge lambda (référentiel hg) pour JDK 8, si vous avez vraiment envie de plonger dans le fond de la piscine.
Examiner la collecte des ordures est probablement une bonne idée. Une recherche rapide a révélé cet article de Dr. Dobbs sur le GC le premier de Java. Je ne sais pas si c'est une bonne introduction. Je suppose que vous connaissez déjà les ramasseurs d'ordures de marquage et de balayage et générationnels; sinon, vous voudrez d'abord les lire.
la source
Quelques idées supplémentaires:
la source
Si vous n'êtes pas encore familier avec le format de bytecode Java, alors envisagez d'écrire un petit compilateur qui crée un code d'octet Java valide (ou un assembleur Jasmin) et faites-le fonctionner correctement.
Voir "Hello World" ou "4" (donné 2 + 2) généré par votre code est très satisfaisant.
la source
En plus de ce que tout le monde a dit, consultez la page Java Performance Tuning . Il contient de nombreux articles sur la récupération de place et le réglage des performances en général. Il contient également une liste de livres de réglage des performances qui pourraient également être intéressants pour vous.
la source