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. He tomado 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 JVM y la investigación según sea necesario.
SUPER
realmente la bandera en los archivos de clase? La mayor parte de eso se describe en la especificación JVM, pero requiere un poco de trabajo para sacarlo de allí y meterlo en su cerebro ;-)Respuestas:
Hice un poco de esto cuando comencé con Java, hace años. Mi enfoque era leer las especificaciones de la máquina virtual y observar la salida de javap -c, que muestra el código de bytes desmontado de una clase. También intenté crear clases java con 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 expresiones Lambda que Brian Goetz de Oracle ha publicado, que cubre la estrategia que se utilizará para traducir las lambdas (cierres, esencialmente) que se agregan 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 del compilador javac con soporte lambda (repositorio hg) para JDK 8, si realmente desea sumergirse en el extremo profundo de la piscina.
Examinar la recolección de basura es probablemente una buena idea. Una búsqueda rápida apareció en este artículo del Dr. Dobbs sobre el primer GC de basura de Java. No sé si es una buena introducción. Supongo que ya sabe acerca de los recolectores de basura de marca y barrido y generacionales; si no, querrás leer sobre esos primero.
fuente
Algunas ideas adicionales:
fuente
Si aún no está familiarizado con el formato de código de bytes de Java, considere escribir un pequeño compilador que cree un código de bytes de Java válido (o ensamblador Jasmin) y haga que se ejecute correctamente.
Ver "Hello World" o "4" (dado 2 + 2) generado por su código es muy satisfactorio.
fuente
Además de lo que todos los demás han dicho, consulte la página Java Performance Tuning . Contiene muchos artículos sobre recolección de basura y ajuste de rendimiento en general. También contiene una lista de libros de ajuste de rendimiento que también pueden ser interesantes para usted.
fuente