OPTIMIZACION DE LA MAQUINA VIRTUAL DE JAVA II
Resumen
General de los Componentes de la JVM
La manera básica del funcionamiento
de un compilador es primero tomar como entrada un idioma y producir un lenguaje
ejecutable como salida. Un compilador Java tiene dos tareas principales:
- · Habilitar el lenguaje Java para ser más portabe, esto quiere decir que no necesariamente tiene que estar ligado a alguna plataforma en específico.
- · Asegurar que el resultado es el código de ejecución eficiente de la plataforma en curso.
Los compiladores pueden ser estáticos
o dinámicos.
Un ejemplo de un compilador estático
es “javac”. Para este compilador es necesario el código Java como entrada y lo
traduce a bytecode (un lenguaje que es ejecutable por la JVM). Los compiladores
estáticos interpretan el código de entrada una vez y el ejecutable de salida es
la forma que se utilizará cuando el programa se ejecute.
Debido a que su entrada es estática
siempre se ve el mismo resultado. Solo cuando se realizan cambios en el código fuente
original y se vuelve a compilar se puede ver un resultado diferente.
Los compiladores dinámicos conocidos
como “Just In Time” (JIT), realizan la traducción de un idioma a otro de forma dinámica,
lo que significa que lo hacen según como se va ejecutando el código. Un
compilador JIT permite recopilar datos en tiempo de ejecución o crear perfiles
(por medio de la inserción de contadores de rendimiento) y así tomar decisiones
sobre la marcha utilizando los mismos datos del entorno sobre el cual se está ejecutando.
La compilación dinámica permite
mejores instrucciones de secuencia en los programas compilado con el lenguaje y
reemplazar las instrucciones más eficientes e incluso eliminar las operaciones
redundantes,
Con el tiempo se puede
recoger más datos acerca de los perfiles de código y tomar decisiones sobre
optimización
de código y recomplilacion.
La compilación dinámica permite
la ventada de ser capaz de adaptarse a los cambios en el comportamiento o la
carga de aplicaciones. Esta es la razón por la cual los compiladores dinámicos están
muy bien adaptados al tiempo de ejecución de Java. El problema es que los
compiladores dinámicos requieren estructuras adicionales de datos, hilos, y
ciclos de CPU para la optimización.
La
asignación de recursos conduce a la recolección de basura (Garbage Collection)
La asignación de recursos se
realiza en función de cada hilo (thread)
que no es más que un espacio de memoria dedicada y direcciones del proceso de
Java también conocido como “Heap” que
no
es más que un almacenamiento dinámico.
La asignación de un thread
individual es común de encontrar en las aplicaciones cliente-servidor. La asignación
de un thread individual hacia un único subproceso
Continuará…
No hay comentarios:
Publicar un comentario