You are on page 1of 14

¿Qué es el JDK? ¿Qué función tiene el JDK en java?

JDK. Java Development Kit, es un software que provee herramientas de Desarrollo para la creación
de programas en Java. Puede instalarse en una Computadora local o en una unidad de Red.

Definición
Se puede definir como un conjunto de herramientas, utilidades, documentación y ejemplos para
desarrollar aplicaciones Java.

Componentes del JDK


JDK consta de una serie de aplicaciones y componentes, para realizar cada una de las tareas de las
que es capaz de encargarse.

A continuación se explican más en profundidad cada uno de ellos, así como su sintaxis, indicando
entre corchetes aquellos elementos que sean opcionales.

Todos los programas permiten la inclusión de una serie de opciones sobre su ejecución antes del
primer argumento. Estas opciones se indican precedidas de un menos(-):

programa -opcion1 -opcion2 Parametro1

Todas las opciones que los ejecutables del JDK presentan se muestran llamando al programa sin
parámetros o con las opciones -? o -help:
programa
programa -help
programa -?

Intérprete en tiempo de ejecución (JRE)


Permite la ejecución de los programas Java (*.class) no gráficos (aplicaciones). La Sintaxis para su
utilización es la siguiente:
java [Opciones] ClaseAEjecutar [Argumentos]

Compilador
Se utiliza para compilar archivos de código fuente Java (habitualmente *.java), en archivos de
clases Java ejecutables (*.class). Se crea un Archivo de clase para cada clase definida en un archivo
fuente.Este compilador es una utilidad en línea de comandos con la siguiente sintaxis:
javac [Opciones] ArchivoACompilar

Visualizador de applets
Es una herramienta que sirve como campo de pruebas de applets, visualizando cómo se mostrarían
en un navegador, en lugar de tener que esperar. Al ser activado desde una línea de órdenes abre una
ventana en la que muestra el contenido de la applet. Se activa con la sintaxis:
appletviewer [Opciones] Applet

Depurador
Es una utilidad de línea de comandos que permite depurar aplicaciones Java.
No es un entorno de características visuales, pero permite encontrar y eliminar los errores de los
programas Java con mucha exactitud. Es parecido en su funcionamiento al depurador gdb que se
incluye con las distribuciones del compilador gcc/g++ para C/C++. Se activa con la sintaxis:
jdb [Opciones]

Desensamblador de archivo de clase


Se utiliza para desensamblar un archivo de clase. Su salida por defecto, muestra los atributos y
métodos públicos de la clase desensamblada, pero con la opción -c también desensambla los
códigos de byte, mostrándolos por pantalla. Es útil cuando no se tiene el código fuente de una clase
de la que se quisiera saber cómo fue codificado. La sintaxis es la siguiente:

javap [Opciones] [NombresClases]

Generador de cabecera y archivo de apéndice


Se utiliza para generar archivos fuentes y cabeceras C para implementar métodos Java en C (código
nativo). Esto se consigue mediante la generación de una estructura C cuya distribución coincide con
la de la correspondiente clase Java. El generador de cabeceras javah, crea los ficheros de
cabecera C/C++ para implementar en esos lenguajes los métodos nativos que presente un programa
Java. La sintaxis es la siguiente:
javah [Opciones] NombreClase

Generador de documentación
Es una herramienta útil para la generación de documentación API directamente desde el código
fuente Java. Genera páginas HTML basadas en las declaraciones y comentarios javadoc, con el
formato /** comentarios */:
La documentación que genera es del mismo estilo que la documentación que se obtiene con el JDK.
Las etiquetas, que se indican con una arroba (@), aparecerán resaltadas en la documentación
generada. Su sintaxis es:
javadoc Opciones NombreArchivo

Applets de demostración
El JDK incluye una serie de applets de demostración, con su código fuente al completo.
Código fuente la API. El código fuente de la API se instala de forma automática, cuando se
descomprime el JDK, aunque permanece en formato comprimido en un archivo llamado "scr.zip"
localizado en el directorio Java que se creó durante la instalación.
¿Qué significa JRE, para qué es y cómo funciona?
Así es cómo funciona JRE (Java Runtime Environment). También conoceremos los componentes que
cuenta. ¿Sabes realmente lo que es JRE?

Componentes del JRE


JRE consta de los siguientes componentes:

 Tecnologías de implementación, incluido el deployment, Java Web Start y Java Plug-in.


 Herramientas de interfaz de usuario, incluyendo Abstract Window Toolkit (AWT), Swing,
Java 2D, Accessibility, Image I/O, Print Service, Sound, drag and drop (DnD) e input methods
 Bibliotecas de integración, que incluyen Interface Definition Language (IDL), Java Database
Connectivity (JDBC), Java Naming and Directory Interface (JNDI), Remote Method Invocation
(RMI), Remote Method Invocation Over Internet Inter-Orb Protocol (RMI-IIOP) y scripting.
 Otras bibliotecas base, incluyendo international support, input/output (I/O), extension
mechanism, Beans, Java Management Extensions (JMX), Java Native Interface (JNI), Math,
Networking, Override Mechanism, Security, Serialization y Java for XML Processing (XML
JAXP). .
 Bibliotecas de base Lang y util, incluidas lang y util, management, versioning, zip, instrument,
reflection, Collections, Concurrency Utilities, Java Archive (JAR), Logging, Preferences API,
Ref Objects y Regular Expressions.
 Java Virtual Machine (JVM), incluidas Java HotSpot Client y Server Virtual Machines.

Cómo funciona JRE


Para comprender cómo funciona el JRE, consideremos un archivo fuente Java guardado
como Example.java. El archivo se compila en un conjunto Byte Code que se almacena en un archivo
“.class“. Aquí estará “Example.class“.

El siguiente diagrama muestra lo que se hace en tiempo de compilación.


Las siguientes acciones ocurren en tiempo de ejecución.

 Class Loader: El Class Loader carga todas las clases necesarias para la ejecución de un
programa. Proporciona seguridad al separar los espacios de nombres del sistema de archivos
local, de los importados a través de la red. Estos archivos se cargan desde un disco duro, una red
o desde otras fuentes.
 Byte Code Verifier: La JVM coloca el código en Byte Code Verifier que verifica el formato y
busca un código ilegal. El código ilegal, por ejemplo, es un código que infringe los derechos de
acceso en los objetos o viola la implementación de los punteros.

El Byte Code verifier (verificador de código de bytes) asegura que el código se adhiere a la
especificación de la JVM y no viola la integridad del sistema.

 Intrepreter: En tiempo de ejecución, el intérprete carga, verifica y ejecuta el Byte Code. El


intérprete tiene las siguientes dos funciones:

1. Ejecute el ByteCode

2. Hace llamadas apropiadas al hardware subyacente

Ambas operaciones se pueden mostrar como:


Para comprender las interacciones entre JDK y JRE, considere el siguiente diagrama:

Interacción entre JDK y JRE


¿Cuál es la diferencia entre el JDK y el JRE?
Para poder simplemente ejecutar un programa en JAVA, necesitamos tener como mínimo el Java
Runtime Environment (JRE) instalado. El JRE, solo nos permitirá ejecutar programas una vez
compilados. Sería el software (programa) equivalente al programa de fotografía que nos permite
abrir las fotos pero en el caso, el JRE ejecutará o muy entre comillas “abrirá” los programas de
JAVA.

En el caso de querer desarrollar programas con Java, necesitaremos el JDKtambién conocido


como Java Development Kit o en castellano Kit de Desarrollo de Java, que simplemente es un
software (programa) que provee las herramientas de desarrollo para la creación de programas en
Java.
A modo de curiosidad, además de JRE y JDK, tenemos el SDK Software Development Kit que es
muy similar al JDK.

Nosotros instalaremos el JDK ya qué con el JRE solo podríamos ejecutar los programas una vez
compilados y con extensión .class.

¿Qué es la JVM y para qué sirve?


La JVM (Java Virtual Machine) actúa como un motor en tiempo de ejecución para ejecutar aplicaciones
Java. Conoce aquí la arquitectura de la Máquina Virtual Java!

Como vimos anteriormente en las características de Java, se destaca por ser independiente de la
plataforma, y precisamente esto se debe a la JVM, pero ¿qué es realmente la máquina virtual de
Java?

JVM es la que realmente llama al método principal presente en un código Java. JVM es una parte del
JRE (Java Run Environment).

Las aplicaciones Java se llaman WORA (Write Once Run Everywhere). Esto significa que un
programador puede desarrollar código Java en un sistema y puede esperar que se ejecute en cualquier
otro sistema habilitado para Java sin ningún ajuste. Todo esto es posible gracias a la JVM.

1. Así funciona la JVM


Cuando compilamos un archivo .java, el compilador Java genera un archivo .class (contiene byte-code)
con el mismo nombre del archivo. Este archivo .class entra en varios pasos cuando lo ejecutamos. Estos
pasos juntos describen toda la arquitectura JV
M.

1.1. Subsistema Java Class Loader


Es principalmente responsable de tres actividades:

 Carga
 Enlace
 Inicialización

1.1.1. Carga

El cargador de clases lee el archivo .class, genera los datos binarios correspondientes y los guarda en
el área de métodos (“method area” –vea la imagen anterior). Para cada archivo .class, JVM almacena la
siguiente información en el área de método.

1. Nombre completamente calificado de la clase cargada y su clase primaria inmediata.

2. Si el archivo .class está relacionado con Class o Interface o Enum

3. Información sobre modificadores, variables, métodos, etc.

Después de cargar el archivo .class, JVM crea un objeto de tipo Class para representar este archivo en la
memoria heap. Tenga en cuenta que este objeto es de tipo Class predefinido en el paquete java.lang.
Este objeto Class puede ser utilizado por el programador para obtener información de nivel de clase
como nombre de clase, nombre principal, métodos e información de variable, etc. Para obtener esta
referencia de objeto, podemos usar el método getClass() de la clase Object.

Por ejemplo:
1. // Un programa de Java para demostrar el funcionamiento de un objeto de tipo Class
2. // creado por la JVM para representar el archivo .class en momoria
3. import java.lang.reflect.Field;
4. import java.lang.reflect.Method;
5.
6. // Código Java para demostrar el uso del objeto Class
7. // creado por JVM
8. public class Test
9. {
10. public static void main(String[] args)
11. {
12. Student s1 = new Student();
13.
14. // Obtener el objeto Class creado
15. // por la JVM.
16. Class c1 = s1.getClass();
17.
18. // Imprimir el tipo de objeto usando c1.
19. System.out.println(c1.getName());
20.
21. // Obteniendo todos los métodos en una matriz
22. Method m[] = c1.getDeclaredMethods();
23. for (Method method : m)
24. System.out.println(method.getName());
25.
26. // Obteniendo todos los campos en una matriz
27. Field f[] = c1.getDeclaredFields();
28. for (Field field : f)
29. System.out.println(field.getName());
30. }
31. }
32.
33. // Una clase de muestra cuya información se obtiene anteriormente usando
34. // su objeto class.
35. class Student
36. {
37. private String name;
38. private int roll_No;
39.
40. public String getName() { return name; }
41. public void setName(String name) { this.name = name; }
42. public int getRoll_no() { return roll_No; }
43. public void setRoll_no(int roll_no) {
44. this.roll_No = roll_no;
45. }
46. }
Salida:

Student
getName
setName
getRoll_no
setRoll_no
name
roll_No

1. Student s2 = new Student();


2. // c2 apuntará al mismo objeto donde
3. // c1 está apuntando
4. Class c2 = s2.getClass();
5. System.out.println(c1==c2); // true
1.1.2. Vinculación o Enlace

Realiza la verificación, la preparación y (opcionalmente) la resolución.

 Verificación: asegura la exactitud del archivo .class, es decir, comprueba si este archivo está
formateado correctamente y generado por un compilador válido o no. Si la verificación falla,
obtenemos la excepción de tiempo de ejecución java.lang.VerifyError.
 Preparación: JVM asigna memoria para las variables de clase e inicializa la memoria a los
valores predeterminados.
 Resolución: es el proceso de reemplazar referencias simbólicas del tipo con referencias directas.
Se realiza buscando en el área del método (method area) para localizar la entidad a la que se
hace referencia.

1.1.3. Inicialización

En esta fase, todas las variables estáticas se asignan con sus valores definidos en el código y en el bloque
estático (si corresponde). Esto se ejecuta de arriba a abajo en una clase y de padres a hijos en la jerarquía
de clases.

En general, hay tres cargadores de clase (class loaders):

 Cargador de clases Bootstrap (Bootstrap class loader): cada implementación de JVM debe
tener un cargador de clases de arranque, capaz de cargar clases confiables. Carga las clases API
centrales de java presentes en el directorio JAVA_HOME/jre/lib. Esta ruta se conoce
popularmente como ruta de arranque. Se implementa en lenguajes nativos como C, C++.
 Cargador de clases de extensiones (Extension class loader): es un elemento secundario del
Bootstrap class loader. Carga las clases presentes en los directorios de
extensiones JAVA_HOME/jre/lib/ext (Ruta de extensión) o cualquier otro directorio
especificado por la propiedad del sistema java.ext.dirs. Está implementado en Java por la clase
sun.misc.Launcher$ExtClassLoader.
 Cargador de clases de sistema/aplicación (system/Application class loader): es secundario del
cargador de clases de extensión. Es responsable de cargar las clases desde la ruta de la clase de
aplicación. Internamente utiliza la variable de entorno asignada a java.class.path. También se
implementa en Java mediante la clase sun.misc.Launcher$AppClassLoader.

Por ejemplo:

1. // Código Java para demostrar el subsistema de cargador de clases


2. public class Test
3. {
4. public static void main(String[] args)
5. {
6. // clase String es cargado por bootstrap loader, y
7. // bootstrap loader no es un objeto de Java, por lo tanto nulo
8. System.out.println(String.class.getClassLoader());
9.
10. // La clase Test es cargada por Application loader
11. System.out.println(Test.class.getClassLoader());
12. }
13. }
Salida:

null
sun.misc.Launcher$AppClassLoader@73d16e93

Nota: JVM sigue el principio Delegación-Jerarquía para cargar clases. El cargador de clases
del sistema delega la solicitud de carga al cargador de clases de extensión y la solicitud de
delegado del cargador de clases de extensión al cargador de clases bootstrap. Si la clase se
encuentra en la ruta boot-strap, la clase se carga; de lo contrario, solicite de nuevo las
transferencias al cargador de clases de extensión y luego al cargador de clases del sistema. Por
último, si el cargador de clases del sistema no puede cargar la clase, entonces obtenemos la
excepción de tiempo de ejecución java.lang.ClassNotFoundException.

Estructura JVM Inicialización

1.2. Memoria JVM

 Área de método (Method area): en el área de método, se almacena toda la información del
nivel de clase, como el nombre de clase, el nombre inmediato de la clase principal, la
información de métodos y variables, etc., incluidas las variables estáticas. Solo hay un área de
método por JVM, y es un recurso compartido.
 Área Heap (Heap area): la información de todos los objetos se almacena en el área heap.
También hay un área heap por JVM. También es un recurso compartido.
 Área de pila (Stack area): para cada subproceso, JVM crea una pila en tiempo de ejecución que
se almacena aquí. Cada bloque de esta pila se llama registro de activación/marco de pila que
almacena los métodos de llamadas. Todas las variables locales de ese método se almacenan en
su marco correspondiente. Una vez que finaliza un hilo, JVM destruirá la pila en tiempo de
ejecución. No es un recurso compartido.
 Registros de PC (PC Registers): Almacena la dirección de la instrucción de ejecución actual de
un hilo. Obviamente, cada hilo tiene registros de PC separados.
 Pilas de métodos nativos (Native method stacks): para cada hilo, se crea una pila nativa
separada. Almacena información del método nativo.

Memoria JVM Java


1.3. Motor de ejecución (Execution Engine)
El motor de ejecución ejecuta .class (bytecode). Lee el código de bytes línea por línea, usa datos e
información presente en varias áreas de memoria y ejecuta instrucciones. Se puede clasificar en tres
partes:

 Intérprete: interpreta el bytecode línea por línea y luego lo ejecuta. La desventaja aquí es que
cuando se llama un método varias veces, cada vez se requiere interpretación.
 Compilador Just-In-Time (JIT): se usa para aumentar la eficiencia del intérprete. Compila
todo el bytecode y lo cambia a código nativo para que cada vez que el intérprete vea llamadas a
métodos repetidos, JIT proporcione código nativo directo para esa parte, de modo que la
reinterpretación no es necesario, por lo tanto, se mejora la eficiencia.
 Recolector de basura: destruye objetos no referenciados.

1.4. Interfaz nativa de Java (JNI – Java Native Interface)


Es una interfaz que interactúa con las Bibliotecas de métodos nativos y proporciona las bibliotecas
nativas (C, C++) necesarias para la ejecución. Permite a la JVM llamar a bibliotecas C/C ++ y ser
llamado por bibliotecas C/C++ que pueden ser específicas del hardware.

1.5. Bibliotecas de métodos nativos (Native Method Libraries)


Es una colección de bibliotecas nativas (C, C ++) que requiere el motor de ejecución.

¿Qué significa IDE? Escriba tres ejemplos.

IDE de Programación: Un IDE es


un entorno de programación que ha IDE de Programación
sido empaquetado como un programa
de aplicación, o sea, consiste en un
editor de código, un compilador, un
depurador y un constructor de
interfaz gráfica. Los IDEs pueden ser
aplicaciones por sí solas o pueden ser
parte de aplicaciones existentes. El
lenguaje Visual Basic, por ejemplo,
puede ser usado dentro de las
aplicaciones de Microsoft Office, lo
que hace posible escribir sentencias
Visual Basic en forma de macros para
Microsoft Word. Concepto: Un IDE es un entorno de programación
integrado que ha sido empaquetado
Características como un programa de aplicación

Los IDE ofrecen un marco de trabajo amigable para la mayoría de los lenguajes de programación
tales como C++, Python, Java, C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede
funcionar como un sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de
programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto, como es
el caso de Smalltalk u Objective-C.

Es posible que un mismo IDE pueda funcionar con varios lenguajes de programación. Este es el
caso de Eclipse, al que mediante plugins se le puede añadir soporte de lenguajes adicionales.

Un IDE debe tener las siguientes características:

 Multiplataforma
 Soporte para diversos lenguajes de programación
 Integración con Sistemas de Control de Versiones
 Reconocimiento de Sintaxis
 Extensiones y Componentes para el IDE
 Integración con Framework populares
 Depurador
 Importar y Exportar proyectos
 Múltiples idiomas
 Manual de Usuarios y Ayuda
Componentes
 Editor de texto.
 Compilador.
 Intérprete.
 Herramientas de automatización.
 Depurador.
 Posibilidad de ofrecer un sistema de control de versiones.
 Factibilidad para ayudar en la construcción de interfaces gráficas de usuarios.

Ejemplos

Eclipse: Entorno de desarrollo integrado de código abierto multiplataforma para


desarrollar proyectos. Esta plataforma ha sido usada para desarrollar entornos de
desarrollo integrados , como el IDE de Java llamado Java Development Toolkit
(JDT) y el compilador (ECJ) que se entrega como parte de Eclipse (y que son
usados también para desarrollar el mismo Eclipse). También se puede usar para otros tipos de
aplicaciones cliente, como BitTorrent o Azureus. En Eclipse se pueden usar diferentes lenguajes de
programación como: Java, ANCI C, C++, JSP, sh, perl, php, sed.

NetBeans: Programa que sirve como IDE que permite programar en distintos
lenguajes, es ideal para trabajar con el lenguaje de desarrollo JAVA (y todos sus
derivados), además ofrece un excelente entorno para programar en PHP. También
se puede descargar una vez instalado NetBeans, los complementos para
programar en C++. La IDE de NetBeans es perfecta y muy comoda para los
programadores. Tiene un excelente balance entre una interfaz con múltiples opciones y un aceptable
completamiento de código.

Geany: Es un IDE que hasta hace bien poquito sólo estaba disponible para
sistemas Linux, Mac OS X y BSD, pero ya está disponible para Windows. Este
entorno es muy sencillo, pero proporciona las funcionalidades necesarias para desarrollar
aplicaciones sin problemas. Su interfaz está dividida en tres zonas: panel lateral con el árbol de
carpetas y documentos abiertos, sección principal para el código y panel inferior para los mensajes
de la aplicación, compilación, etc. Este IDE permite programar en diferentes lenguajes como:
C, C++, Java, Python, Pascal, SQL o HTML

CodeRun: Es un IDE que te permitirá programar en línea varios lenguajes, entre


ellos PHP, Ajax, C#, CSS, JavaScript y HTML. Funciona perfectamente, aunque
está en inglés, es útil para quién no disponga de un buen editor a mano.
¿Para qué sirve el PATH y CLASSPATH en JAVA?

Son variables de entorno, y ¿que son las variables de entorno? no son mas que variables
que almacenan configuraciones y direcciones de nuestro sistema como carpeta de usuarios,
direcciones de librerías o recursos del sistema, etc.
Entonces:

PATH:-Para poder ejecutar programas Java desde cualquier carpeta, la carpeta con los
archivos javac.exe y java.exe debe estar incluida en el PATH del sistema.

CLASSPATH:-la cual determina dónde buscar tanto las clases o librerías de Java (el API
de Java) como otras clases de usuario. La variable CLASSPATH puede incluir la ruta de
directorios o ficheros *.zip o *.jar en los que se encuentren los ficheros *.class. En el caso
de los ficheros *.zip hay que observar que los ficheros en él incluidos no deben estar
comprimidos.

You might also like