P.O.O. 1 Ambiente de ejecución Java es un ambiente de ejecución y de programación orientada a objetos, concurrente, basado en clases y compuesto de: Un lenguaje de programación Una especificación API Una especificación de máquina virtual El entorno de ejecución de Java (JRE, Java Runtime Environment) es el ambiente de software en el cual los programas compilados para una implementación de JVM típica pueden correr. El sistema de ejecución incluye: El código necesario para ejecutar programas de Java, métodos nativos dinámicamente enlazados, administración de memoria y manejo de excepciones. Una implementación de la JVM. 3.1 Compilador Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora. El compilador de java es JDK (J2SE) distribuido por SUN Microsystems y es necesario tener instalado tanto el compilador (javac) como la JVM (java). 1: Con un editor de texto simple (incluso notepad sirve, aunque resulta poco aconsejabe) creamos un archivo con el código java asignándole nombre con la extensión .java. 2: Abrimos una ventana DOS y cambiamos el path a la carpeta donde se encuentre el archivo: C:> cd C:\ApuntesJava Y compilamos con ‘javac’ C:\ApuntesJava>javac HolaMundo.java Si no hay ningún error en el programa se producirá la compilación y el compilador almacenará en el mismo directorio un fichero de nombre HolaMundo.class, con el código ejecutable correspondiente a la clase HolaMundo. En Java las mayúsculas y minúsculas son significativas. En el ejemplo se utiliza la clase del API de Java System. Sin embargo el programa no tiene ningún import. No obstante el compilador no detecta ningún error y genera el código ejecutable directamente. Esto se debe a que la clase System está definida en el package java.lang, que es el único del que no es necesario hacer el import, que es hecho implicitamente por el compilador. Para cualquier clase del API, definida fuera de este package es necesario hacer el import correspondiente. 3.2 Ejecución Los archivos .class son invocables directamente desde la línea de comandos (con la sintaxis java nombreDeClase) si tienen un método main definido. Se utiliza el comando ‘java’. C:\ApuntesJava>java HolaMundo Unidad 3 L.S.C. Lourdes E. Ramírez Fernández -1- P.O.O. 1 Se cargará la JVM, cargará la clase HolaMundo y llamará a su método main que producirá en la ventana DOS la salida del programa (impresión en pantalla). 3.3 Argumentos de la línea de comandos Una aplicación Java puede aceptar cualquier número de argumentos desde la línea de comandos. Los argumentos de la línea de comandos permiten al usuario variar la operación de una aplicación. Cuando llama a una aplicación, el usuario teclea los argumentos de la línea de comandos después del nombre de la aplicación. En el lenguaje Java, cuando se llama a una aplicación, el sistema de ejecución pasa los argumentos de la línea de comandos al método main de la aplicación, mediante un array de Strings. Cada String del array contiene un argumento. Esta sencilla aplicación muestra todos los argumentos de la línea de comandos uno por uno en cada línea. class Echo { public static void main (String[] args) { for (int i = 0; i < args.length; i++) System.out.println(args[i]); } } C:\> java Echo Bebe agua Caliente Bebe agua Caliente C:\ java Echo "Bebe agua Caliente" Bebe agua Caliente 3.4 Máquina virtual Una Máquina virtual Java (en inglés Java Virtual Machine, JVM) es un máquina virtual de proceso nativo, es decir, ejecutable en una plataforma específica, capaz de interpretar y ejecutar instrucciones expresadas en un código binario especial (el Java bytecode), el cual es generado por el compilador del lenguaje Java. El código binario de Java no es un lenguaje de alto nivel, sino un verdadero código máquina de bajo nivel. La JVM es una de las piezas fundamentales de la plataforma Java. Actúa como un puente que entiende tanto el bytecode, como el sistema sobre el que se pretende ejecutar. La gran ventaja de la máquina virtual java es aportar portabilidad al lenguaje de manera que desde Sun Microsystems se han creado diferentes máquinas virtuales java para diferentes arquitecturas y así un programa .class escrito en un Windows puede ser interpretado en un entorno Linux. Tan solo es necesario disponer de dicha máquina virtual para dichos entornos. Unidad 3 L.S.C. Lourdes E. Ramírez Fernández -2- P.O.O. 1 3.5 Recolección de basura El entorno de ejecución de Java tiene un recolector de basura que periódicamente libera la memoria ocupada por los objetos que no se van a necesitar más. El recolector de basura de Java es un barredor de marcas que escanea dinámicamente la memoria de Java buscando objetos, marcando aquellos que han sido referenciados. Después de investigar todos los posibles paths de los objetos, los que no están marcados (esto es, no han sido referenciados) se les conoce como basura y son eliminados. El recolector de basura funciona en un thread (hilo) de baja prioridad y funciona tanto síncrona como asíncronamente dependiendo de la situación y del sistema en el que se esté ejecutando el entorno Java. El recolector de basura se ejecuta síncronamente cuando el sistema funciona fuera de memoria o en respuesta a una petición de un programa Java. Un programa Java le puede pedir al recolector de basura que se ejecute en cualquier momento mediante una llamada a System.gc(). Nota: Pedir que se ejecute el recolector de basura no garantiza que los objetos sean recolectados. Unidad 3 L.S.C. Lourdes E. Ramírez Fernández -3-