Acercándose a las partes internas de Java / JVM [cerrado]

15

He programado en Java durante aproximadamente 8 años y conozco el lenguaje bastante bien como desarrollador, pero mi objetivo es profundizar mi conocimiento de los aspectos internos. Tomé cursos de pregrado en diseño de PL, pero fueron descripciones académicas muy amplias (en Scheme, IIRC).

¿Alguien puede sugerir una ruta para comenzar a profundizar en los detalles? Específicamente, ¿hay temas particulares (por ejemplo, recolección de basura) que podrían ser más accesibles o ser un buen punto de partida? ¿Existe un libro decente de alto nivel sobre los aspectos internos de la JVM y el diseño del lenguaje de programación Java? Mi enfoque actual será comenzar con la especificación de JVM e investigación según sea necesario.

    
pregunta spinning_plate 01.06.2012 - 02:11
fuente

4 respuestas

13

Hice un poco de esto cuando empecé con Java, hace años. Mi enfoque fue leer la espec. De VM , y mirar en la salida de javap -c, que muestra el código de bytes desensamblado de una clase. También intenté crear clases java con un bytecode particular, usando un ensamblador de bytecode java. Hay un ensamblador llamado jasmin , si quieres probar eso.

También puede consultar el Documento de traducción de Lambda Expression que Brian Goetz de Oracle ha publicado, que cubre la estrategia que se utilizará para traducir las lambdas (cierres, esencialmente) que se están agregando en Java 8.

También puede obtener el código fuente de la máquina virtual Hotspot de OpenJDK , y la versión de acceso temprano de la compilador javac con soporte lambda (repositorio de hg) para JDK 8, si realmente te apetece bucear en el extremo profundo de la piscina.

Mirar en la recolección de basura es probablemente una buena idea. Una búsqueda rápida mostró este Dr. Artículo de Dobbs sobre el GC de basura de Java. No sé si eso es una buena introducción. Supongo que ya sabe acerca de los recolectores de basura y generacionales; si no, querrás leer sobre ellos primero.

    
respondido por el David Conrad 01.06.2012 - 02:46
fuente
3

Algunas ideas adicionales:

  • Participe en el proyecto OpenJDK . ¡Nada mejor que entender los componentes internos de algún software al piratearlo!
  • Observe cómo otros idiomas de JVM (por ejemplo, Clojure o Scala) generan código para la JVM
  • Realice un mini-proyecto que le interese y requiera el uso de elementos internos de JVM. Tal vez esté usando algo como ASM para manipular el código de bytes ..
respondido por el mikera 01.06.2012 - 09:33
fuente
2

Si aún no está familiarizado con el formato de bytecode de Java, considere escribir un pequeño compilador que cree un código de byte Java válido (o ensamblador Jasmin) y hágalo funcionar correctamente.

Ver "Hello World" o "4" (dado 2 + 2) generado por tu código es muy satisfactorio.

    
respondido por el user1249 01.06.2012 - 13:22
fuente
1

Además de lo que todos los demás han dicho, consulte la página Ajuste de rendimiento de Java . Contiene una gran cantidad de artículos sobre recolección de basura y ajuste de rendimiento en general. También contiene una lista de libros de ajustes de rendimiento que también podrían interesarle.

    
respondido por el Andreas Johansson 01.06.2012 - 12:45
fuente

Lea otras preguntas en las etiquetas