Que una clase en JVM está representada por una secuencia de bytes que comienza con “0xcafebabe” (una secuencia hexadecimal) y sigue cierta estructura.
Fuente y binario parcial para Hello.java:
clase publica hola
{
public static void main (String [] args) {
System.out.println (“Hello, World!”);
}
}
0000: cafe nena 0000 002e 001a 0a00 0600 0c09 ……………. 0010: 000d
000e 0800 0f0a 0010 0011 0700 1207 ……………. 0020: 0013 0100 063c
696e 6974 3e01 0003 2829… .. … () 0030: 5601 0004 436f 6465 0100
046d 6169 6e01 V … Código … principal. 0040: 0016 285b 4c6a 6176 612f 6c61 6e67
2f53 .. ([Ljava / lang / S 0050: 7472 696e 673b 2956 0c00 0700 0807 0014
tring;) V …… .. 0060: 0c00 1500 1601 000d 4865 6c6c 6f2c 2057 …… ..Hola,
W 0070: 6f72 6c64 2107 0017 0c00 1800 1901 0005 orld! …………. 0080:
4865 6c6c 6f01 0010 6a61 7661 2f6c 616e Hola… java / lan 0090: 672f 4f62
6a65 6374 0100 106a 6176 612f g / Objeto … java / 00a0: 6c61 6e67 2f53 7973
7465 6d01 0003 6f75 lang / System … ou
Lo primero en la representación de la clase binaria es la firma “cafe babe” que identifica el formato de la clase Java.
Cada clase binaria de Java, incluso una que no esté presente en el sistema de archivos, debe comenzar con estos cuatro bytes.
El resto de los datos no son de mucho interés en este momento.
- ¿Puedo convertirme en un científico de datos autodidacta?
- ¿Hay algún sitio web o aplicación disponible para ayudarnos a hablar inglés con fluidez (como una persona virtual que habla con nosotros en inglés)?
- Cómo aprender mejor otro idioma (por ejemplo, español / portugués) en mi poco tiempo libre y al mismo tiempo trabajar horas de IB en un banco BB en Londres
- Tengo 8 horas diarias para la programación. Deseo usarlo sabiamente. ¿Cuáles son las diferentes cosas que puedo aprender en este tiempo?
- Aprendiendo cosas nuevas: ¿Qué es un poco de conocimiento general poco conocido en tu campo?
¡Esto hace que las cosas sean increíblemente flexibles!
Puede crear clases sobre la marcha y desde diferentes fuentes, como la base de datos, el sistema de archivos, la red o incluso a través de otro programa.
Esto es también lo que permite que diferentes idiomas como JRuby, Clojure, Jython, etc. se ejecuten en JVM.
A JVM no le importa mientras los bytes estén bien estructurados.
Todas las clases están vinculadas dinámicamente en tiempo de ejecución (a diferencia de C / C ++) dentro de la JVM.
Esto hace que la plataforma Java sea independiente y adecuada para la movilidad de red.
¡Puedes escribir tus propios ClassLoaders que pueden crear clases para ti desde prácticamente cualquier fuente bajo el sol!
Por lo tanto, puede hacer que un Servlet responda con una secuencia de bytes que se adhieran al formato de clase y puede escribir un ClassLoader que enviará una solicitud HTTP a este Servlet y construirá una clase sobre la marcha usando la respuesta.
Las posibilidades son ilimitadas!
Sugeriría leer el libro ” Inside the Java Virtual Machine ” de Bill Venners.